If-Koubou

Czy serwery sieciowe mają tylko jedną stronę internetową?

Czy serwery sieciowe mają tylko jedną stronę internetową? (Jak)

Kiedy po raz pierwszy zaczniesz się uczyć, jak nazwy domen, adresy IP, serwery WWW i witryny internetowe pasują i współpracują ze sobą, czasami może to być trochę mylące lub przytłaczające. Jak to wszystko działa tak sprawnie? Dzisiejszy post z pytaniami i odpowiedziami dla SuperUser zawiera odpowiedzi na ciekawe pytania czytelnika.

Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, społecznościowego forum z pytaniami i odpowiedziami.

Zdjęcie dzięki uprzejmości Rosmarie Voegtli (Flickr).

Pytanie

Czytnik SuperUser user3407319 chce wiedzieć, czy serwery internetowe posiadają tylko jedną stronę internetową:

W oparciu o to, co rozumiem przez DNS i łączenie nazwy domeny z adresem IP serwera, na którym jest przechowywana strona internetowa, czy to oznacza, że ​​każdy serwer internetowy może przechowywać tylko jedną stronę internetową? Jeśli serwery internetowe obsługują więcej niż jedną stronę, to jak to wszystko rozwiązuje się, aby uzyskać dostęp do strony internetowej, którą chcę, bez żadnych problemów i pomyłek?

Czy serwery internetowe posiadają tylko jedną stronę internetową, czy mają więcej?

Odpowiedź

Pomocnik SuperUser Bob ma odpowiedź dla nas:

Zasadniczo przeglądarka zawiera nazwę domeny w żądaniu HTTP, aby serwer WWW wiedział, która domena została zamówiona i może odpowiednio zareagować.

Żądania HTTP

Oto, jak wygląda typowe żądanie HTTP:

1. Użytkownik podaje adres URL w postaci http: // host: port / path.

2. Przeglądarka wyodrębnia część adresu URL hosta (domeny) i tłumaczy ją na adres IP (jeśli jest to konieczne) w procesie zwanym rozpoznawaniem nazw. Tłumaczenie to może odbywać się przez DNS, ale nie musi (na przykład lokalny plik hosts na zwykłych systemach operacyjnych omija DNS).

3. Przeglądarka otwiera połączenie TCP z określonym portem lub domyślnie port 80 na tym adresie IP.

4. Przeglądarka wysyła żądanie HTTP. W przypadku HTTP / 1.1 wygląda to następująco:

Nagłówek hosta jest standardowy i wymagany w HTTP / 1.1. Nie określono go w specyfikacji HTTP / 1.0, ale niektóre serwery i tak to obsługują.

Stąd serwer internetowy ma kilka informacji, które mogą posłużyć do określenia odpowiedzi. Należy pamiętać, że możliwe jest powiązanie pojedynczego serwera WWW z wieloma adresami IP.

  • Żądany adres IP z gniazda TCP (dostępny jest również adres IP klienta, ale jest to rzadko używane, a czasami do blokowania / filtrowania)
  • Żądany port, z gniazda TCP
  • Żądana nazwa hosta podana w nagłówku hosta przez przeglądarkę w żądaniu HTTP
  • Żądana ścieżka
  • Wszelkie inne nagłówki (pliki cookie itp.)

Jak się wydaje, zauważyłeś, że najczęstsza konfiguracja współdzielonego hostingu w dzisiejszych czasach nakłada wiele witryn na kombinację jednego adresu IP: portu, pozostawiając tylko hostowi rozróżnienie między witrynami.

Jest to znane jako Host wirtualny oparty na nazwie w Apache-land, podczas gdy Nginx nazywa je nazwami serwerów w blokach serwerów, a IIS preferuje serwer wirtualny.

Co z HTTPS?

HTTPS jest nieco inny. Wszystko jest identyczne do ustanowienia połączenia TCP, ale po tym musi zostać utworzony szyfrowany tunel TLS. Celem nie jest ujawnianie jakichkolwiek informacji o żądaniu.

Aby zweryfikować, czy serwer sieciowy faktycznie jest właścicielem tej domeny, serwer WWW musi wysłać certyfikat podpisany przez zaufaną stronę trzecią. Przeglądarka porówna następnie ten certyfikat z żądaną domeną.

To stanowi problem. W jaki sposób serwer WWW wie, który certyfikat hosta / strony internetowej wysłać, jeśli musi to zrobić przed otrzymaniem żądania HTTP?

Tradycyjnie zostało to rozwiązane dzięki dedykowanemu adresowi IP (lub portowi) dla każdej witryny wymagającej HTTPS. Oczywiście stało się to problematyczne, ponieważ kończy nam się adres IPv4.

Wprowadź SNI (Server Name Indication). Przeglądarka przekazuje teraz nazwę hosta podczas negocjacji TLS, więc serwer internetowy ma te informacje wystarczająco wcześnie, aby wysłać prawidłowy certyfikat. Po stronie serwera konfiguracja jest bardzo podobna do konfiguracji hostów wirtualnych HTTP.

Minusem jest to, że nazwa hosta jest teraz przekazywana jako zwykły tekst przed szyfrowaniem i zasadniczo jest to informacja wyciekła. Zwykle uważa się to za możliwy do zaakceptowania kompromis, chociaż biorąc pod uwagę nazwę hosta, jest on normalnie wyświetlany w zapytaniu DNS.

Co się stanie, jeśli poprosisz o stronę internetową tylko według adresu IP?

Co robi serwer WWW, gdy nie wie, który konkretny host jest wymagany, zależy od implementacji i konfiguracji serwera WWW. Zazwyczaj określona jest strona "domyślna", "catch-all" lub "fall back", która zapewnia odpowiedzi na wszystkie żądania, które nie określają jawnie hosta.

Ta domyślna witryna może być własną, niezależną witryną (często zawierającą komunikat o błędzie) lub inną witryną na serwerze internetowym, w zależności od preferencji administratora serwera WWW.

Czy masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych użytkowników Stack Exchange, którzy znają się na technologii? Sprawdź cały wątek dyskusji tutaj.