Kiedy po raz pierwszy zaczynasz uczyć się, jak nazwy domen, adresy IP, serwery internetowe i witryny internetowe pasują do siebie i współpracują, może to być czasami trochę zagmatwane lub przytłaczające. Jak to wszystko działa tak płynnie? Dzisiejszy post z pytaniami i odpowiedziami dla SuperUser zawiera odpowiedzi na pytania zaciekawionego czytelnika.
Dzisiejsza sesja pytań i odpowiedzi jest dostępna dzięki uprzejmości SuperUser - części Stack Exchange, grupy witryn internetowych z pytaniami i odpowiedziami.
Zdjęcie dzięki uprzejmości Rosmarie Voegtli (flickr) .
Pytanie
Czytnik SuperUser user3407319 chce wiedzieć, czy serwery internetowe obsługują tylko jedną witrynę internetową:
Opierając się na tym, co rozumiem o DNS i łączeniu nazwy domeny z adresem IP serwera WWW, na którym przechowywana jest witryna, czy oznacza to, że każdy serwer WWW może obsługiwać tylko jedną witrynę? Jeśli serwery internetowe obsługują więcej niż jedną witrynę internetową, to jak można to wszystko rozwiązać, abym mógł uzyskać dostęp do żądanej witryny bez żadnych problemów lub pomyłek?
Czy serwery internetowe obsługują tylko jedną witrynę internetową, czy też więcej?
Odpowiedź
Współautor SuperUser Bob ma dla nas odpowiedź:
Zasadniczo przeglądarka umieszcza nazwę domeny w żądaniu HTTP, dzięki czemu serwer sieciowy wie, która domena została zażądana i może odpowiednio odpowiedzieć.
Żądania HTTP
Oto jak zachodzi typowe żądanie HTTP:
1. Użytkownik podaje adres URL w postaci http: // host: port / ścieżka.
2. Przeglądarka wyodrębnia część adresu URL dotyczącą hosta (domeny) i tłumaczy ją na adres IP (w razie potrzeby) w procesie znanym jako rozpoznawanie nazw. To tłumaczenie może nastąpić przez DNS, ale nie musi (na przykład lokalny plik hosts w popularnych 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 protokołu HTTP / 1.1 wygląda to tak:
![]()
Nagłówek hosta jest standardowy i wymagany w protokole HTTP / 1.1. Nie zostało to określone w specyfikacji HTTP / 1.0, ale niektóre serwery i tak go obsługują.
Stąd serwer sieciowy ma kilka informacji, których może użyć, aby zdecydować, jaka powinna być odpowiedź. Należy pamiętać, że istnieje możliwość przypisania jednego serwera WWW do wielu adresów IP.
- Żądany adres IP, z gniazda TCP (adres IP klienta jest również dostępny, ale jest rzadko używany, a czasami do blokowania / filtrowania)
- Żądany port z gniazda TCP
- Żądana nazwa hosta określona w nagłówku hosta przez przeglądarkę w żądaniu HTTP
- Żądana ścieżka
- Wszelkie inne nagłówki (pliki cookie itp.)
Jak pewnie zauważyłeś, obecnie najpopularniejsza konfiguracja hostingu współdzielonego polega na umieszczeniu wielu witryn internetowych pod jednym kombinacją adresu IP: portu, pozostawiając tylko hosta do rozróżnienia witryn.
Jest to znane jako Host wirtualny oparty na nazwach w krainie Apache, podczas gdy Nginx ich woła Nazwy serwerów w blokach serwerów i preferują usługi IIS Wirtualny serwer .
A co z HTTPS?
HTTPS jest trochę inny. Wszystko jest identyczne, aż do ustanowienia połączenia TCP, ale potem trzeba ustanowić zaszyfrowany tunel TLS. Celem jest, aby nie ujawniać żadnych informacji o żądaniu.
Aby sprawdzić, czy serwer sieciowy faktycznie jest właścicielem tej domeny, serwer sieciowy musi wysłać certyfikat podpisany przez zaufaną stronę trzecią. Przeglądarka porówna następnie ten certyfikat z żądaną domeną.
To stanowi problem. Skąd serwer WWW wie, który host / certyfikat witryny ma wysłać, jeśli musi to zrobić przed odebraniem żądania HTTP?
Tradycyjnie rozwiązano ten problem, mając dedykowany adres IP (lub port) dla każdej witryny wymagającej protokołu HTTPS. Oczywiście stało się to problematyczne, ponieważ kończą się adresy IPv4.
Wchodzić SNI (Wskazanie nazwy serwera). Przeglądarka przekazuje teraz nazwę hosta podczas negocjacji TLS, więc serwer WWW ma te informacje wystarczająco wcześnie, aby wysłać poprawny certyfikat. Po stronie serwera WWW konfiguracja jest bardzo podobna do konfiguracji hostów wirtualnych HTTP.
Wadą jest to, że nazwa hosta jest teraz przekazywana jako zwykły tekst przed szyfrowaniem i jest zasadniczo informacją, która wyciekła. Jest to zwykle uważane za akceptowalny kompromis, chociaż biorąc pod uwagę, że nazwa hosta jest normalnie ujawniana w zapytaniu DNS.
Co zrobić, jeśli zażądasz witryny internetowej tylko za pomocą adresu IP?
To, co robi serwer WWW, gdy nie wie, którego konkretnego hosta zażądałeś, zależy od implementacji i konfiguracji serwera WWW. Zwykle jest określona „domyślna”, „catch-all” lub „awaryjna” witryna internetowa, która będzie odpowiadać na wszystkie żądania, które nie określają wyraźnie hosta.
Ta domyślna witryna internetowa może być własną, niezależną witryną (często wyświetlającą komunikat o błędzie) lub dowolną inną witryną na serwerze sieciowym, w zależności od preferencji administratora serwera WWW.
Masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych zaawansowanych technicznie użytkowników Stack Exchange? Sprawdź cały wątek dyskusji tutaj .