Letzte Woche habe ich in meiner Computernetzwerk Klasse ziemlich viel Aufhebens über die Notwendigkeit einer obligatorischen Host
-Klausel im Header von HTTP 1.1 GET Nachrichten gemacht.
Der Grund dafür, dass ich im Web geschrieben oder von meinen Klassenkameraden angeschrien werde, ist immer derselbe: die Notwendigkeit, virtuelles Hosting zu unterstützen . Jedoch, und ich werde versuchen, so klar wie möglich zu sein, das scheint keinen Sinn zu ergeben.
Ich verstehe, dass, um zwei Domains auf einer einzigen Maschine zu betreiben (und infolgedessen die gleiche IP -Adresse teilen), es eine Möglichkeit geben muss, beide Domain-Namen zu unterscheiden.
Was ich nicht verstehe ist, warum es nicht möglich ist, diese ohne a Host
-Klausel ( HTTP 1.0 -Stil) zu erreichen, indem ein absolutes URL (zB GET http://www.example.org/index.html
) statt einer relativen (zB GET /index.html
).
Wenn die HTTP Nachricht an den Server gelangt, würde sie (der Server) die Nachricht an den entsprechenden Host umleiten, nicht indem sie die Host
-Klausel betrachtet, sondern stattdessen den Hostnamen in der URL in der -Anforderungszeile der Nachricht .
Ich wäre sehr dankbar, wenn einer von euch Hardcore-Hackern mir helfen könnte zu verstehen, was genau ich hier vermisse.
Dies wurde in dieser Thread :
bescheidene Vorschläge für HTTP / 2.0 mit ihrer Begründung.
- Fügen Sie der Client-Anfrage eine Kopfzeile hinzu, die den Hostnamen und angibt Port der URL, auf die der Client zugreift.
Begründung: Eine der am häufigsten angeforderten Funktionen des kommerziellen Servers Betreuer ist die Fähigkeit, einen einzelnen Server an einem einzigen Port auszuführen und sie reagieren mit verschiedenen Top - Level - Seiten abhängig von der Hostname in der URL.
Um eine absolute Anfrage-URI zu erstellen (weil der Kunde vorher nicht wissen kann, ob der Server eine oder mehrere Sites hostet), war suggested :
Rufe den ersten Vorschlag auf, den Hostnamen irgendwo einzubauen. Dies wäre am saubersten in die URL selbst: -
%Vor%Dies ist die Syntax für Proxy-Weiterleitungen.
Zu welchem Dieses Argument wurde gemacht:
Da es eine Mischung von Clients geben wird, werden einige unterstützende Hostnamensberichte unterstützt und einige nicht, es spielt einfach keine Rolle, wie diese Informationen auf den Server gelangen. Da es keine Rolle spielt, ist die einfachere Lösung ein neues HTTP Anfrage-Header-Feld. Es ermöglicht allen Clients und Servern, wie sie arbeiten mach jetzt mit NO Code Änderungen. Clients und Server, die tatsächlich einen Host benötigen Namensinformationen können winzige Mods enthalten, um das zusätzliche Header-Feld zu senden enthält die URL und verarbeitet sie.
[...]
Alles was ich vorschlage ist, dass es einen besseren Weg gibt Implementieren der Übermittlung von Hostnameninformationen an den Server, der nicht involviert ist Hacken der Anfrage-Syntax und kann rückwärtskompatibel mit allen Clients sein und Server.
Fühlen Sie sich frei, weiterzulesen, um die endgültige Entscheidung selbst zu entdecken. Aber seien Sie gewarnt, es ist leicht, sich darin zu verlieren.
Der Grund für den Header 'Host' ist, explizit anzugeben, auf welchen Host sich diese Anfrage bezieht. Ohne 'Host' muss der Server im Voraus wissen, dass er 'Joe's Dogs', während er routen soll, ' Ссылка ' routen soll ' Ссылка 'zu Jo's Cats, obwohl sie sich auf demselben Webserver befinden. (Was ist, wenn ein Server zwei Namen hat, wie "joscats.com" und "joescats.com", die sich auf die gleiche Website beziehen sollten?)
Wenn Sie einen expliziten Header 'Host' haben, können Sie diese Art von Entscheidungen viel einfacher programmieren.
Der Grund für das Hinzufügen von Unterstützung zum Angeben eines Hosts in einer HTTP-Anfrage war das begrenzte Angebot an IP-Adressen (das war noch kein Problem, als HTTP 1.0 herauskam).
Wenn Ihre Frage " warum geben Sie den Host in einem Host-Header im Gegensatz zu der Request-Line " lautet, lautet die Antwort die Notwendigkeit der Interopatibilität zwischen HTTP / 1.0 und 1.1.
>Wenn die Frage " warum ist der Host-Header obligatorisch " ist, hat dies mit dem Wunsch zu tun, den Übergang von zugewiesenen IP-Adressen zu beschleunigen.
Hier finden Sie einige Hintergrundinformationen zur Erhaltung der Internetadresse in Bezug auf HTTP / 1.1.
Tags und Links http networking web network-protocols