Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse der Hauptmerkmale und Unterschiede verschiedener HTTP-Versionen

Analyse der Hauptmerkmale und Unterschiede verschiedener HTTP-Versionen

小云云
小云云Original
2018-01-29 11:01:541780Durchsuche

HTTP hat viele Versionen und jede Version hat auch ihre eigenen Unterschiede. Dieser Artikel ist ein Überblick und eine Zusammenfassung der Hauptfunktionen verschiedener Versionen von HTTP.

HTTP1.0

Die 1.0 Version der früheren HTTP ist ein zustandsloses, verbindungsloses Anwendungsschichtprotokoll.

HTTP1.0 legt fest, dass der Browser und der Server eine kurzfristige Verbindung aufrechterhalten müssen. Bei jeder Anfrage des Browsers muss eine TCP-Verbindung mit dem Server hergestellt werden Während die Verarbeitung abgeschlossen ist (keine Verbindung), verfolgt der Server weder jeden Client noch protokolliert er vergangene Anfragen (zustandslos). TCP

Diese Zustandslosigkeit kann durch den

Mechanismus zur Identitätsauthentifizierung und Statusaufzeichnung erreicht werden. Die folgenden beiden Fragen sind problematischer. cookie/session

Zuallererst ist der größte Leistungsmangel, der durch die verbindungslose Funktion verursacht wird,

die Unfähigkeit, Verbindungen wiederzuverwenden. Jedes Mal, wenn eine Anfrage gesendet wird, ist eine -Verbindung erforderlich, und der TCP-Verbindungsfreigabeprozess ist ziemlich zeitaufwändig. Durch diese verbindungslose Funktion ist die Netzwerkauslastung sehr gering. TCP

Die zweite Möglichkeit ist die Head-of-Line-Blockierung (

). Denn head of line blocking legt fest, dass die nächste Anfrage gesendet werden muss, bevor die Antwort auf die vorherige Anfrage eintrifft. Unter der Annahme, dass die Antwort auf die vorherige Anfrage nie eintrifft, wird die nächste Anfrage nicht gesendet und die gleichen nachfolgenden Anfragen werden ebenfalls blockiert. HTTP1.0

Um diese Probleme zu lösen, erschien

. HTTP1.1

HTTP1.1

Für

erbt es nicht nur die einfachen Funktionen von HTTP1.1, sondern überwindet auch viele HTTP1.0 Leistungsprobleme. HTTP1.0

Die erste ist

lange Verbindung, fügt ein HTTP1.1-Feld hinzu. Durch die Einstellung von Connection können Sie verhindern, dass die Keep-Alive-Verbindung getrennt wird, wodurch die Notwendigkeit entfällt Der Client muss sich jedes Mal mit dem Server verbinden. Anforderungen müssen wiederholt hergestellt, freigegeben und HTTP Verbindungen hergestellt werden, was die Netzwerkauslastung verbessert. Wenn der Client die TCP-Verbindung schließen möchte, kann er HTTP im Anforderungsheader enthalten, um den Server anzuweisen, die Anforderung zu schließen. Connection: false

Zweitens gibt es die

SupportanfrageHTTP1.1Pipelined (). Die lange Verbindung basierend auf pipelining ermöglicht eine Anforderungspipeline. Durch Pipelining können Anfragen parallel übermittelt werden. Wenn der Hauptteil der Antwort beispielsweise eine HTTP1.1-Seite ist und die Seite viele html enthält, dann spielt img eine große Rolle und kann mehrere Anfragen parallel senden. (Der Client stellt eine Verbindung zum Server basierend auf dem Domänennamen her. Im Allgemeinen stellen PC-Browser gleichzeitig keep-alive Verbindungen zum Server eines einzelnen Domänennamens her. Mobile Endgeräte steuern im Allgemeinen die Nummer auf 6~8. Dies Aus diesem Grund richten viele große Websites unterschiedliche statische Ressourcen ein, um Ressourcen zu laden.) 4~6

Es ist zu beachten, dass

der Server die entsprechenden Ergebnisse in der vom Client angeforderten Reihenfolge zurücksenden muss, um dies sicherzustellen dass der Client den Antwortinhalt jeder Anfrage unterscheiden kann.

Mit anderen Worten:

Pipeline ermöglicht es uns, die First-In-First-Out-Warteschlange vom Client (Anfragewarteschlange) zum Server (Antwortwarteschlange) zu migrieren. HTTP

Analyse der Hauptmerkmale und Unterschiede verschiedener HTTP-Versionen

Wie in der Abbildung gezeigt, hat der Client zwei Anfragen gleichzeitig gesendet, um

bzw. html zu erhalten cssDie Ressource ist zuerst bereit und der Server sendet zuerst css und dann html. css

Gleichzeitig ermöglicht die

Pipeline-Technologie dem Client nur, gleichzeitig eine Reihe von Anforderungen an einen Server zu senden muss auch auf den vorherigen Satz von Anfragen warten. Alle Antworten sind abgeschlossen.

Es ist ersichtlich, dass

die Lösung der Head-of-Line-Blockierung (HTTP1.1) noch nicht abgeschlossen ist. Gleichzeitig gibt es verschiedene Probleme mit der „Pipeline“-Technologie, so dass viele Browser sie entweder überhaupt nicht unterstützen oder sie einfach standardmäßig deaktivieren und die Bedingungen für die Aktivierung sehr streng sind...head of line blocking

Darüber hinaus

wurde auch HTTP1.1 Cache-Verarbeitung (starker Cache und ausgehandelter Cache [Portal]) , Unterstützung für Haltepunktübertragung und die Hinzufügung von Host-Feld (ermöglicht die Verwendung eines Servers zum Erstellen mehrerer Websites). Die neuen Funktionen von HTTP2.0

sind ungefähr wie folgt:

HTTP2.0

Binary Framing

Zwischen der Anwendungsschicht und der Übertragungsschicht wird eine binäre Rahmenschicht hinzugefügt, die die Leistungsbeschränkungen von

durchbricht und die Übertragungsleistung verbessert. HTTP2.0HTTP1.1

Analyse der Hauptmerkmale und Unterschiede verschiedener HTTP-Versionen

Es ist ersichtlich, dass, obwohl die Spezifikationen zwischen dem HTTP2.0-Protokoll und dem HTTP1.x-Protokoll völlig unterschiedlich sind, HTTP2.0 die Semantik von HTTP1.x tatsächlich nicht ändert.
Um es einfach auszudrücken: HTTP2.0 kapselt einfach die HTTP1.x- und header-Teile des Originals body mit frame neu ein.

Multiplexing (Verbindungsfreigabe)

Hier ein paar Konzepte:

  • Stream (stream): Bidirektionales Byte Streamen Sie über eine bestehende Verbindung.

  • Nachricht: Eine vollständige Reihe von Datenrahmen, die der logischen Nachricht entsprechen.

  • Frame (frame): HTTP2.0 Die kleinste Kommunikationseinheit. Jeder Frame enthält einen Frame-Header, der mindestens den Stream identifiziert, zu dem der aktuelle Frame gehört (stream id).

Analyse der Hauptmerkmale und Unterschiede verschiedener HTTP-Versionen

Wie auf dem Bild zu sehen ist, werden alle HTTP2.0Kommunikationen über eine Verbindung abgeschlossen, die beliebige Daten übertragen kann Menge des bidirektionalen Datenflusses.

Jeder Datenstrom wird in Form einer Nachricht gesendet, und eine Nachricht besteht aus einem oder mehreren Frames. Diese Frames können in der falschen Reihenfolge gesendet und dann basierend auf der Stream-ID (stream id) im Header jedes Frames wieder zusammengesetzt werden.

Beispielsweise handelt es sich bei jeder Anfrage um einen Datenstrom. Der Datenstrom wird in Form einer Nachricht gesendet, und die Nachricht wird in mehrere Frame-Datensätze stream id unterteilt Der Stream, zu dem er gehört, kann in der Verbindung beliebig gemischt werden. Der Empfänger kann Frames basierend auf stream id verschiedenen Anfragen neu zuordnen.

Außerdem kann Multiplexing (Verbindungsfreigabe) dazu führen, dass kritische Anfragen blockiert werden. Jeder Datenstrom in HTTP2.0 kann Prioritäten und Abhängigkeiten festlegen. Datenströme mit hoher Priorität werden zuerst vom Server verarbeitet und an den Client zurückgegeben. Datenströme können auch von anderen Unterdatenströmen abhängen.

Header-Komprimierung

In HTTP1.x werden Header-Metadaten im Klartext gesendet, wobei normalerweise 500–800 Bytes zu jeder Anforderungslast hinzugefügt werden.

Zum Beispiel cookie hängt der Browser standardmäßig cookie an header an und sendet es bei jeder Anforderung an den Server. (Da cookie relativ groß ist und jedes Mal wiederholt gesendet wird, werden Informationen im Allgemeinen nicht gespeichert und nur zur Statusaufzeichnung und Identitätsauthentifizierung verwendet.)

HTTP2.0Verwenden Sie encoder, um die Anzahl von die übertragen werden müssen. Jede Kommunikationspartei header verfügt über eine cache Tabelle, wodurch nicht nur wiederholte header fields Übertragungen vermieden werden, sondern auch die zu übertragende Größe reduziert wird. Effiziente Komprimierungsalgorithmen können header stark komprimieren, die Anzahl der gesendeten Pakete reduzieren und dadurch die Latenz verringern. header

Server Push

Zusätzlich zur Reaktion auf die anfängliche Anfrage kann der Server zusätzliche Ressourcen an den Client weiterleiten, ohne dass eine explizite Anfrage des Clients erforderlich ist.

Zusammenfassung

HTTP1.0

  • Zustandslos, keine Verbindung

HTTP1.1

  • Persistente Verbindung

  • Anforderungspipeline

  • Hinzufügen Cache-Verarbeitung

  • Feld

    hinzufügen, Haltepunktübertragung unterstützen usw.Host

HTTP2.0

  • Binäres Framing

  • Multiplexing (oder Verbindungsfreigabe)

  • Header-Komprimierung

  • Server Push

Verwandte Empfehlungen:


Über HTTP/2 Server Push

PHP implementiert HTTP-Authentifizierung

Beispielanalyse, wie PHP simulierte HTTP-Anfragen implementiert

Das obige ist der detaillierte Inhalt vonAnalyse der Hauptmerkmale und Unterschiede verschiedener HTTP-Versionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn