it-swarm.com.de

Was ist der http-Host-Header?

Da die TCP -Verbindung bereits beim Senden der HTTP-Anforderung besteht, sind die IP-Adresse und der Port implizit bekannt - eine TCP -Verbindung ist ein IP + Port. Warum brauchen wir den Host-Header? Ist dies nur für den Fall erforderlich, dass mehrere Hosts der IP-Adresse zugeordnet sind, die in der Verbindung TCP enthalten ist?

58
VladimirLenin

Der Header Host teilt dem Webserver mit, welcher virtueller Host verwendet werden soll (falls eingerichtet). Sie können sogar denselben virtuellen Host verwenden, indem Sie mehrere Aliase (= Domains und Wildcard-Domains) verwenden. In diesem Fall haben Sie weiterhin die Möglichkeit, diesen Header manuell in Ihrer Web-App zu lesen, wenn Sie ein anderes Verhalten basierend auf verschiedenen angesprochenen Domänen bereitstellen möchten. Dies ist möglich, weil Sie in Ihrem Webserver one vhost als Standardhost einrichten können (und wenn ich mich nicht irre, müssen Sie das auch tun). Dieser Standard-vhost wird verwendet, wenn der Header Host keinem der konfigurierten virtuellen Hosts entspricht.

Das bedeutet: Sie verstehen es richtig, auch wenn die Aussage "mehrere Hosts" etwas irreführend sein kann: Der Host (der angesprochene Rechner) ist derselbe, was wirklich in die IP-Adresse aufgelöst wird, sind unterschiedliche Domainnamen = (einschließlich Subdomains), die auch als Hostnamen (aber nicht als Hosts!) bezeichnet werden.

Obwohl nicht Teil der Frage, ein lustiger Fakt: Diese Spezifikation führte zu Problemen mit SSL in den frühen Tagen, da der Webserver das Zertifikat liefern muss, das der Domäne entspricht, die der Client angesprochen hat. Um jedoch zu wissen, welches Zertifikat verwendet werden soll, sollte der Webserver den adressierten Hostnamen im Voraus kennen. Da der Client diese Informationen jedoch nur über den verschlüsselten Kanal sendet (dh, nachdem das Zertifikat bereits gesendet wurde), musste der Server davon ausgehen, dass Sie den Standardhost durchsucht haben. Das bedeutete eine SSL-gesicherte Domain pro IP-Adresse/Port-Kombination.

Dies wurde behoben mit Server Name Indication ; Dies bricht jedoch erneut die Privatsphäre, da der Servername jetzt wieder im Klartext übertragen wird, sodass jeder Mann in der Mitte welcher Hostname sehen würde, zu dem Sie eine Verbindung herstellen möchten.

Obwohl der Webserver den Hostnamen von der Server Name Indication kennt, ist der Header Host nicht veraltet, da die Server Name Indication-Informationen nur im TLS-Handshake verwendet werden. Bei einer ungesicherten Verbindung gibt es überhaupt keine Angabe des Servernamens, daher ist der Header Host weiterhin gültig (und erforderlich).

Eine weitere lustige Tatsache: Die meisten Webserver (wenn nicht alle) lehnen Ihre http-Anfrage ab, wenn sie nicht genau einen Host - Header enthält, auch wenn dieser weggelassen werden könnte, da nur der Standard-vhost konfiguriert ist. Das bedeutet, dass die minimal erforderliche Information in einer http get-) Anfrage die erste Zeile ist, die METHODRESOURCE und PROTOCOL VERSION Und mindestens Host enthält. Header, wie folgt:

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

Sie können die --- (MDN-Dokumentation im Host-Header lesen, um weitere Informationen zu erhalten

In allen HTTP/1.1-Anforderungsnachrichten muss ein Hostheaderfeld gesendet werden. Ein 400-Statuscode (Bad Request) wird an alle HTTP/1.1-Anforderungsnachrichten gesendet, denen ein Host-Headerfeld fehlt oder die mehr als ein Feld enthalten.

Wie von Darrel Miller erwähnt, finden Sie die vollständigen technischen Daten in RFC72 .

103
Psi

Ich würde immer empfehlen, zur autorisierenden Quelle zu gehen, wenn Sie versuchen, die Bedeutung und den Zweck von HTTP-Headern zu verstehen.

Das Headerfeld "Host" in einer Anforderung enthält den Host und den Port
Informationen vom Ziel-URI, sodass der Origin-Server
zwischen Ressourcen unterscheiden, während Anforderungen für mehrere bearbeitet werden
Hostnamen auf einer einzigen IP-Adresse.

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

10
Darrel Miller

HTTP 1.1, ein Hostheader, ist eine dritte Information, die Sie zusätzlich zur IP-Adresse und Portnummer verwenden können, um eine Webdomäne oder, wie Microsoft sie nennt, einen Anwendungsserver eindeutig zu identifizieren. Der Hostheader-Name für die URL www.example.com lautet beispielsweise www.example.com. Ein Browser mit HTML 3.0 oder höher unterstützt HTTP 1.1. Der Browser enthält den Namen des Hostheaders, den Sie im Feld location des Anforderungsheaders angegeben haben, den der Browser an den Server sendet. Wenn Sie im Anforderungsheader keinen Host-Headernamen angeben, fungiert die Stammwebdomäne als Standardwebserver.

0
Kiara Lima