Zasadniczo: przeglądarka uwzględnia nazwę domeny w żądaniu HTTP, dzięki czemu serwer internetowy wie, która domena została zażądana i może odpowiednio odpowiedzieć.
Żądania HTTP
Oto jak dzieje się Twoje typowe żądanie HTTP:
Użytkownik podaje adres URL w formie http://host:port/path
.
Przeglądarka wyodrębnia część adresu URL hosta (domeny) i, jeśli to konieczne, przekształca ją na adres IP, w procesie znanym jako rozpoznawanie nazw . To tłumaczenie może odbywać się przez DNS, ale nie musi (na przykład hosts
plik lokalny w popularnych systemach operacyjnych omija DNS).
Przeglądarka otwiera połączenie TCP z określonym portem lub domyślnie z portem 80 dla tego adresu IP.
Przeglądarka wysyła żądanie HTTP. W przypadku HTTP / 1.1 wygląda to tak:
GET /path HTTP/1.1
Host: example.com
( Host
Nagłówek jest standardowy i wymagany w HTTP / 1.1. Nie został określony w specyfikacji HTTP / 1.0, ale niektóre serwery i tak go obsługują.)
Stąd serwer WWW zawiera kilka informacji, które mogą wykorzystać do podjęcia decyzji o odpowiedzi. Pamiętaj, że jeden serwer WWW może być powiązany z wieloma adresami IP.
- Żądany adres IP z gniazda TCP
- Adres IP klienta jest również dostępny, ale jest on rzadko używany - czasami do blokowania / filtrowania
- Żądany port z gniazda TCP
- Żądana nazwa hosta określona w
Host
przeglądarce przez nagłówek żądania HTTP.
- Żądana ścieżka
- Wszelkie inne nagłówki (pliki cookie itp.)
Jak się wydaje, zauważono, że obecnie najpopularniejsza konfiguracja hostingu współdzielonego powoduje umieszczenie wielu stron internetowych pod jednym adresem IP: kombinację portów, pozostawiając tylko Host
rozróżnienie stron internetowych.
Jest to znane jako wirtualny host oparty na nazwie w Apache-land, podczas gdy Nginx nazywa je Nazwy serwerów w blokach serwerów, a IIS woli Serwer wirtualny .
Co z HTTPS?
HTTPS jest nieco inny. Wszystko jest identyczne do ustanowienia połączenia TCP, ale po tym musi zostać ustanowiony zaszyfrowany tunel TLS. Celem jest nie wyciekanie żadnych informacji o żądaniu.
Aby sprawdzić, czy serwer faktycznie jest właścicielem tej domeny, musi wysłać certyfikat podpisany przez zaufaną stronę trzecią. Przeglądarka porówna ten certyfikat z żądaną domeną.
To stanowi problem. Skąd serwer wie, który certyfikat hosta (witryny internetowej) wysłać, jeśli musi to zrobić przed otrzymaniem żądania HTTP?
Tradycyjnie było to rozwiązywane przez posiadanie dedykowanego adresu IP (lub portu) dla każdej strony internetowej wymagającej HTTPS. Oczywiście staje się to problematyczne, gdy zaczynamy brakować adresów IPv4.
Wpisz SNI (wskazanie nazwy serwera). Przeglądarka przekazuje teraz nazwę hosta podczas negocjacji TLS, więc serwer ma te informacje wystarczająco wcześnie, aby wysłać poprawny certyfikat. Po stronie serwera konfiguracja jest bardzo podobna do konfiguracji wirtualnych hostów HTTP.
Minusem jest to, że nazwa hosta jest teraz przekazywana jako zwykły tekst przed szyfrowaniem i zasadniczo jest to wyciek informacji. Jest to zwykle uważane za akceptowalny kompromis, biorąc pod uwagę, że nazwa hosta jest zwykle ujawniona w zapytaniu DNS.
Co się stanie, jeśli poprosisz o witrynę tylko według adresu IP?
To, co robi serwer, gdy nie wie, jakiego konkretnego hosta żądasz, zależy od implementacji i konfiguracji serwera. Zazwyczaj określa się witrynę „domyślną”, „catchall” lub „rezerwową”, która zapewni 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 wyświetlającą komunikat o błędzie) lub może być dowolną z innych witryn na serwerze, w zależności od preferencji administratora serwera.
Host:
nagłówku. W przypadku hostingu współdzielonego dostawca może skonfigurować serwer WWW do obsługi tego na różne sposoby (np. Mieć ustawienie domyślne, przekierować do dostawcy itp.).