Co to jest nagłówek hosta HTTP?


122

Biorąc pod uwagę, że połączenie TCP jest już ustanowione podczas wysyłania żądania HTTP, adres IP i port są niejawnie znane - połączenie TCP to port IP +. Dlaczego więc potrzebujemy Hostnagłówka? Czy jest to potrzebne tylko w przypadku, gdy istnieje wiele hostów zamapowanych na adres IP podany w połączeniu TCP?

Odpowiedzi:


143

hostNagłówek mówi serwer WWW, który wirtualnego hosta do użycia (jeśli jest ustawione). Możesz nawet mieć tego samego wirtualnego hosta, używając kilku aliasów (= domeny i domeny z symbolami wieloznacznymi). W takim przypadku nadal możesz odczytać ten nagłówek ręcznie w swojej aplikacji internetowej, jeśli chcesz zapewnić inne zachowanie w oparciu o różne adresowane domeny. Jest to możliwe, ponieważ na swoim serwerze internetowym możesz (i jeśli się nie mylę, musisz) ustawić jeden vhost jako domyślny host. Ten domyślny vhost jest używany, gdy plikhost nagłówek nie pasuje do żadnego ze skonfigurowanych hostów wirtualnych.

To znaczy: rozumiesz dobrze, chociaż powiedzenie „wiele hostów” może być nieco mylące: host (adresowana maszyna) jest ten sam, to, co naprawdę jest tłumaczone na adres IP, to różne nazwy domen (w tym subdomeny), do których również się odnoszą jako nazwy hostów (ale nie hosty!).

Chociaż nie jest to częścią pytania, zabawny fakt: ta specyfikacja doprowadziła na początku do problemów z SSL, ponieważ serwer sieciowy musi dostarczyć certyfikat odpowiadający domenie, do której adresował klient. Jednak aby wiedzieć, jakiego certyfikatu użyć, serwer WWW powinien był wcześniej znać adresowaną nazwę hosta. Ale ponieważ klient wysyła te informacje tylko przez zaszyfrowany kanał (co oznacza: po wysłaniu certyfikatu), serwer musiał założyć, że przeglądałeś domyślny host. Oznaczało to jedną domenę zabezpieczoną protokołem SSL na kombinację adresu IP / portu.

Zostało to rozwiązane dzięki wskazaniu nazwy serwera ; Jednak to znowu łamie trochę prywatności, ponieważ nazwa serwera jest teraz ponownie przesyłana zwykłym tekstem, więc każdy pośrednik zobaczy, z którą nazwą hosta próbujesz się połączyć.

Chociaż serwer sieciowy znałby nazwę hosta ze wskazania nazwy serwera, hostnagłówek nie jest przestarzały, ponieważ informacje dotyczące wskazania nazwy serwera są używane tylko podczas uzgadniania protokołu TLS. W przypadku niezabezpieczonego połączenia w ogóle nie ma wskazania nazwy serwera, więc hostnagłówek jest nadal ważny (i konieczny).

Kolejny zabawny fakt: większość serwerów WWW (jeśli nie wszystkie) odrzuca twoje żądanie http, jeśli nie zawiera dokładnie jednego hostnagłówka, nawet jeśli można go pominąć, ponieważ skonfigurowano tylko domyślny vhost. Oznacza to, że minimalna wymagana informacji żądania protokole HTTP (korzystać z telefonu) jest pierwszą linią zawierającą METHOD RESOURCEa PROTOCOL VERSIONi co najmniej host-header, na przykład:

GET /someresource.html HTTP/1.1
Host: www.example.com

W dokumentacji MDN na temat nagłówka hosta wyrażają to tak:

Pole nagłówka hosta musi być wysyłane we wszystkich komunikatach żądań HTTP / 1.1. Kod statusu 400 (złe żądanie) zostanie wysłany do każdego komunikatu żądania HTTP / 1.1, który nie ma pola nagłówka hosta lub zawiera więcej niż jeden.

Jak wspomniał Darrel Miller, pełne specyfikacje można znaleźć w RFC7230 .


dobra odpowiedź. Napisałeś „Jest to możliwe, ponieważ na swoim serwerze internetowym możesz (i jeśli się nie mylę, musisz) ustawić jeden vhost jako hosta domyślnego. Ten domyślny vhost jest używany zawsze, gdy nagłówek hosta nie pasuje do żadnego ze skonfigurowanych wirtualnych zastępy niebieskie." Chciałem sprawdzić w RFC7230, ale nie znalazłem vhosttylko 3 bliskich wystąpień o virtual hostznaczeniu nie zbliżonym do twojej frazy i 12 dla defaultgłównie o porcie,
Alexei Martianov

tylko o hoście: „Jeśli nie, to jeśli w polu nagłówka hosta podano niepustą wartość pola, składnik uprawnień jest taki sam, jak wartość pola hosta”. - nie IMHO to samo. Czy możesz wskazać mi w RFC na ten temat?
Alexei Martianov

strona praktyczna: na jakiś serwer wysyłam POST z nagłówkiem host = nazwa domeny i otrzymuję 200 (ok), wysyłam zmieniony nagłówek hosta i otrzymuję 404 (nie znaleziono). Czy może to oznaczać, że serwer nie jest poprawnie (w pełni by the book) skonfigurowany?
Alexei Martianov

ponieważ komentarza nie można edytować: cytat z drugiego miejsca znajdował się blisko defaultsłowa znalezionego przez wyszukiwanie,Otherwise, the authority component is assigned the default name configured for the server
Alexei Martianov

dziwne. wszystkie 3 wystąpienia virtual hostznalezione przez moje wyszukiwanie w tools.ietf.org/html/rfc7230 znajdują się w Appendix A. HTTP Version History. wygląda na to, że Twoje wyszukiwanie znalazło inne.
Alexei Martianov

30

Zawsze radziłbym udać się do autorytatywnego źródła, próbując zrozumieć znaczenie i cel nagłówków HTTP.

Pole nagłówka „Host” w żądaniu zawiera informacje o hoście i porcie
pochodzące z docelowego identyfikatora URI, umożliwiając serwerowi pochodzenia
rozróżnianie zasobów podczas obsługi żądań dotyczących wielu
nazw hostów na jednym adresie IP.

https://tools.ietf.org/html/rfc7230#section-5.4

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.