HTTP 1.0 vs 1.1

263

Könnte mir jemand einen kurzen Überblick über die Unterschiede zwischen HTTP 1.0 und HTTP 1.1 geben? Ich habe einige Zeit mit beiden RFCs verbracht, konnte aber keinen großen Unterschied zwischen ihnen feststellen. Wikipedia sagt dies:

HTTP / 1.1 (1997-1999)

Aktuelle Version; Persistente Verbindungen sind standardmäßig aktiviert und funktionieren gut mit Proxys. Unterstützt auch das Pipelining von Anforderungen, sodass mehrere Anforderungen gleichzeitig gesendet werden können, sodass sich der Server auf die Arbeitslast vorbereiten und die angeforderten Ressourcen möglicherweise schneller an den Client übertragen kann.

Aber das bedeutet mir nicht viel. Mir ist klar, dass dies ein etwas kompliziertes Thema ist, daher erwarte ich keine vollständige Antwort. Kann mir jemand einen kurzen Überblick über die Unterschiede auf einer etwas niedrigeren Ebene geben?
Damit meine ich, dass ich nach Informationen suche, die ich wissen müsste, um entweder einen HTTP-Server oder eine Anwendung zu implementieren. Ich suche meistens nach einem Anstoß in die richtige Richtung, damit ich es selbst herausfinden kann.

Jason Baker
quelle
Dies ist eine recht gute Zusammenfassung der wichtigsten Unterschiede: http://www.research.att.com/~bala/papers/h0vh1.html
Kev
3
Gut, dass du zur Quelle gegangen bist. Es hört sich so an, als wüssten Sie nicht viel über Networking im Allgemeinen, wenn Sie diese Zusammenfassung nicht verstehen. Vielleicht sollten Sie diese Begriffe auch recherchieren.
Marcin
4
Obwohl ich immer noch ein Neuling bin, wenn es um dieses Zeug geht, ist mein Hauptproblem, dass die Zusammenfassung mir mehr das "Was" als das "Wie" gibt.
Jason Baker

Antworten:

363

Proxy-Unterstützung und das Feld Host:

HTTP 1.1 hat einen erforderlichen Host-Header nach Spezifikation.

HTTP 1.0 erfordert offiziell keinen Host-Header, aber es schadet nicht, einen hinzuzufügen, und viele Anwendungen (Proxys) erwarten, dass der Host-Header unabhängig von der Protokollversion angezeigt wird.

Beispiel:

GET / HTTP/1.1
Host: www.blahblahblahblah.com

Dieser Header ist nützlich, weil Sie damit eine Nachricht über Proxyserver weiterleiten können und weil Ihr Webserver zwischen verschiedenen Standorten auf demselben Server unterscheiden kann.

Das bedeutet also, wenn blahblahlbah.com und helohelohelo.com beide auf dieselbe IP verweisen. Ihr Webserver kann das Feld Host verwenden, um zu unterscheiden, welche Site der Clientcomputer möchte.

Dauerhafte Verbindungen:

Mit HTTP 1.1 können Sie auch dauerhafte Verbindungen herstellen, was bedeutet, dass Sie mehr als eine Anforderung / Antwort auf derselben HTTP-Verbindung haben können.

In HTTP 1.0 mussten Sie für jedes Anforderungs- / Antwortpaar eine neue Verbindung öffnen. Und nach jeder Antwort würde die Verbindung geschlossen. Dies führte aufgrund des langsamen TCP-Starts zu einigen großen Effizienzproblemen .

OPTIONEN Methode:

HTTP / 1.1 führt die OPTIONS-Methode ein. Ein HTTP-Client kann diese Methode verwenden, um die Fähigkeiten des HTTP-Servers zu bestimmen. Es wird hauptsächlich für die gemeinsame Nutzung von Cross Origin-Ressourcen in Webanwendungen verwendet.

Caching:

HTTP 1.0 unterstützte das Caching über den Header: If-Modified-Since.

HTTP 1.1 erweitert die Caching-Unterstützung erheblich, indem es das sogenannte "Entity-Tag" verwendet. Wenn zwei Ressourcen identisch sind, haben sie dieselben Entitäts-Tags.

HTTP 1.1 fügt außerdem die bedingten Header If-Unmodified-Since, If-Match, If-None-Match hinzu.

Es gibt auch weitere Ergänzungen zum Caching wie den Cache-Control-Header.

100 Status fortsetzen:

In HTTP / 1.1 100 Continue gibt es einen neuen Rückkehrcode. Dies soll verhindern, dass ein Client eine große Anfrage sendet, wenn dieser Client nicht einmal sicher ist, ob der Server die Anfrage verarbeiten kann oder zur Verarbeitung der Anfrage berechtigt ist. In diesem Fall sendet der Client nur die Header, und der Server teilt dem Client mit. 100 Weiter, fahren Sie mit dem Text fort.

Viel mehr:

  • Digest-Authentifizierung und Proxy-Authentifizierung
  • Zusätzliche neue Statuscodes
  • Chunked-Transfer-Codierung
  • Verbindungsheader
  • Verbesserte Komprimierungsunterstützung
  • Viel viel mehr.
Brian R. Bondy
quelle
15
Beachten Sie, dass viele Server / Proxys, die behaupten, HTTP / 1.0 zu wollen, sehr verärgert sind, wenn Sie den Host-Header weglassen.
Paul Tomblin
2
HTTP 1.0 unterstützt die Komprimierung über den Content-Encoding-Header. Wie Paul bereits erwähnt hat, würde ich definitiv jedem HTTP / 1.0-Client empfehlen, den Host-Header zu senden, da dies nicht strengstens untersagt ist und die Dinge häufiger so funktionieren, wie Sie es erwarten. Ansonsten ist dies tot auf.
cpm
@ Paul Tomblin: Danke, ich habe diese Info hinzugefügt.
Brian R. Bondy
2
In Bezug auf "Wenn Sie haben, dass blahblahlbah.com und helohelohelo.com beide auf dieselbe IP verweisen. Ihr Webserver kann das Feld Host verwenden, um zu unterscheiden, welche Site der Clientcomputer möchte." Was passiert also, wenn ein HTTP 1.0-Client uns kein zu unterscheidendes Hostfeld gibt?
Pacerier
@Pacerier ist normalerweise eine Standardseite. es hängt vom Server ab.
Andrew Lambert
14

 HTTP 1.0 (1994)

  • Es wird noch verwendet
  • Kann von einem Client verwendet werden, der nicht mit blockierten (oder komprimierten) Serverantworten umgehen kann

 HTTP 1.1 (1996–2015)

  • Formalisiert viele Erweiterungen auf Version 1.0
  • Unterstützt dauerhafte und Pipeline-Verbindungen
  • Unterstützt Chunked-Übertragungen, Komprimierung / Dekomprimierung
  • Unterstützt virtuelles Hosting (ein Server mit einer einzelnen IP-Adresse, der mehrere Domänen hostet)
  • Unterstützt mehrere Sprachen
  • Unterstützt Übertragungen im Bytebereich; nützlich, um unterbrochene Datenübertragungen fortzusetzen

HTTP 1.1 ist eine Erweiterung von HTTP 1.0. Im Folgenden sind die vier wichtigsten Verbesserungen aufgeführt:

  1. Effiziente Nutzung von IP-Adressen, indem mehrere Domänen von einer einzigen IP-Adresse aus bedient werden können.

  2. Schnellere Antwort, indem ein Webbrowser mehrere Anforderungen über eine einzige dauerhafte Verbindung senden kann.

  3. Schnellere Antwort für dynamisch generierte Seiten durch Unterstützung der Chunked-Codierung, mit der eine Antwort gesendet werden kann, bevor ihre Gesamtlänge bekannt ist.
  4. Schnellere Reaktion und große Bandbreiteneinsparungen durch Hinzufügen von Cache-Unterstützung.
i_thamary
quelle
9

Für einfache Anwendungen (z. B. sporadisches Abrufen eines Temperaturwerts von einem webfähigen Thermometer) ist HTTP 1.0 sowohl für einen Client als auch für einen Server in Ordnung. Sie können einen Bare-Bones-Socket-basierten HTTP 1.0-Client oder -Server in etwa 20 Codezeilen schreiben.

Für kompliziertere Szenarien ist HTTP 1.1 der richtige Weg. Erwarten Sie eine 3- bis 5-fache Vergrößerung der Codegröße, um die Feinheiten des komplexeren HTTP 1.1-Protokolls zu bewältigen. Die Komplexität ist hauptsächlich darauf zurückzuführen, dass Sie in HTTP 1.1 verschiedene Header erstellen, analysieren und darauf reagieren müssen. Sie können Ihre Anwendung vor dieser Komplexität schützen, indem ein Client eine HTTP-Bibliothek oder ein Server einen Webanwendungsserver verwendet.

Diomidis Spinellis
quelle
7

Ein wichtiges Kompatibilitätsproblem ist die Unterstützung dauerhafter Verbindungen . Ich habe kürzlich an einem Server gearbeitet, der HTTP / 1.1 "unterstützt", die Verbindung jedoch nicht schließen konnte, als ein Client eine HTTP / 1.0-Anforderung gesendet hat. Stellen Sie beim Schreiben eines Servers, der HTTP / 1.1 unterstützt, sicher, dass er auch mit Nur-HTTP / 1.0-Clients funktioniert.

Troy J. Farrell
quelle
8
Erfordert HTTP / 1.1, dass wir HTTP / 1.0-kompatibel sind?
Pacerier
@Troy - Ist es gültig, eine Antwort auf eine HTTP 1.1-Anfrage zu senden und die Verbindung unmittelbar danach zu schließen (Socket, von dem die Anfrage auf dem Server gelesen wurde)? Was praktisch bedeutet, dass der Server HTTP 1.0
Guy Avraham
5

Einer der ersten Unterschiede, an die ich mich von Anfang an erinnern kann, sind mehrere Domänen, die auf demselben Server ausgeführt werden. Das teilweise Abrufen von Ressourcen ermöglicht es Ihnen, den Download einer Ressource abzurufen und zu beschleunigen (dies ist das, was fast jeder Download-Beschleuniger tut).

Wenn Sie eine Anwendung wie eine Website oder ähnliches entwickeln möchten, müssen Sie sich nicht zu viele Gedanken über die Unterschiede machen, aber Sie sollten zumindest den Unterschied zwischen GETund POSTVerben kennen.

Wenn Sie nun einen Browser entwickeln möchten, müssen Sie das vollständige Protokoll kennen und wissen, ob Sie versuchen, einen HTTP-Server zu entwickeln.

Wenn Sie nur das HTTP-Protokoll kennen möchten, würde ich Ihnen empfehlen, mit HTTP / 1.1 anstelle von 1.0 zu beginnen.

Leandro López
quelle
1
Ich denke, Jason kennt den Unterschied zwischen GET und POST bereits, wenn er erwägt, seinen eigenen HTTP-Server / seine eigene HTTP-App von Grund auf zu erstellen. :)
Kev
1
Ich habe tatsächlich einige Arbeiten mit einem Webserver durchgeführt, der derzeit nur HTTP 1.0 unterstützt. Ich habe mich nur gefragt, was mit dem Hinzufügen von 1.1-Unterstützung verbunden ist.
Jason Baker
2

HTTP 1.1 ist die neueste Version des Hypertext Transfer Protocol, des World Wide Web-Anwendungsprotokolls, das auf der TCP / IP-Protokollsuite des Internets ausgeführt wird. Im Vergleich zu HTTP 1.0 bietet HTTP 1.1 eine schnellere Bereitstellung von Webseiten als das ursprüngliche HTTP und reduziert den Webverkehr.

Webverkehr Beispiel: Wenn Sie beispielsweise auf einen Server zugreifen. Gleichzeitig greifen so viele Benutzer auf den Server zu, um die Daten zu erhalten. Dann besteht die Möglichkeit, den Server aufzuhängen. Dies ist Webdatenverkehr.

Krishna Mohan
quelle
1

HTTP 1.1 enthält den Host-Header in seiner Spezifikation, während HTTP 1.0 offiziell keinen Host-Header hat, sich jedoch nicht weigert, einen hinzuzufügen.

Der Host-Header ist nützlich, da er es dem Client ermöglicht, eine Nachricht über den Proxyserver zu leiten. Der Hauptunterschied zwischen HTTP-Versionen 1.0 und 1.1 besteht darin,

  1. HTTP 1.1 wird mit dauerhaften Verbindungen geliefert, die definieren, dass wir mehr als eine Anforderung oder Antwort auf derselben HTTP-Verbindung haben können.
  2. In HTTP 1.0 müssen Sie für jede Anforderung und Antwort eine neue Verbindung öffnen
  3. In HTTP 1.0 hat es ein Pragma, während es in HTTP 1.1 eine Cache-Kontrolle hat, die Pragma ähnelt
Niraj Kumar Jena
quelle
0

Im Vergleich zu 1.0 reduziert 1.1 den Webverkehr

Ram MVS
quelle