Der Grund für eine obligatorische 'Host'-Klausel in HTTP 1.1 GET

8

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.

    
João Silva 12.03.2014, 18:40
quelle

3 Antworten

5

Dies wurde in dieser Thread :

  

bescheidene Vorschläge für HTTP / 2.0 mit ihrer Begründung.

     
  1. Fügen Sie der Client-Anfrage eine Kopfzeile hinzu, die den Hostnamen und angibt   Port der URL, auf die der Client zugreift.
  2.   

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.

    
CodeCaster 17.03.2014, 21:44
quelle
0

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.

    
Mark Leighton Fisher 17.03.2014 21:29
quelle
0

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.

    
Stepan Riha 24.03.2014 14:50
quelle