Czy serwery sieciowe mają tylko jedną stronę internetową?
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, opartego na społecznościach grupowania witryn 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 sieciowego, na którym jest przechowywana strona internetowa, czy to oznacza, że każdy serwer internetowy może posiadać tylko jedną stronę internetową? Jeśli serwery internetowe obsługują więcej niż jedną witrynę, to jak to wszystko rozwiązuje się, aby uzyskać dostęp do strony, którą chcę, bez żadnych problemów i pomyłek?
Czy serwery internetowe posiadają tylko jedną stronę internetową lub 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 to konieczne) w procesie znanym jako rozpoznawanie 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 powoduje umieszczenie wielu witryn na jednej kombinacji 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 serwer IIS preferuje serwer wirtualny..
Co z HTTPS?
HTTPS jest nieco inny. Wszystko jest identyczne do ustanowienia połączenia TCP, ale potem musi zostać utworzony zaszyfrowany tunel TLS. Celem nie jest ujawnianie jakichkolwiek informacji o żądaniu.
Aby zweryfikować, czy serwer sieciowy rzeczywiście 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 było to rozwiązywane 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 (wskazanie nazwy serwera). 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, ale biorąc pod uwagę, że nazwa hosta jest normalnie eksponowana 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.