2. HTTP/2 Protocol Overview (HTTP/2-Protokollübersicht)
HTTP/2 bietet einen optimierten Transport für HTTP-Semantik. HTTP/2 unterstützt alle Kernfunktionen von HTTP, zielt jedoch darauf ab, effizienter als HTTP/1.1 zu sein.
HTTP/2 ist ein verbindungsorientiertes Anwendungsschichtprotokoll (Connection-Oriented Application-Layer Protocol), das über eine TCP-Verbindung ([TCP]) läuft. Der Client ist der Initiator der TCP-Verbindung.
Die grundlegende Protokolleinheit in HTTP/2 ist ein Frame (Section 4.1). Jeder Frame-Typ dient einem anderen Zweck. Beispielsweise bilden HEADERS- und DATA-Frames die Grundlage für HTTP-Anfragen und -Antworten (Section 8.1); andere Frame-Typen wie SETTINGS, WINDOW_UPDATE und PUSH_PROMISE werden zur Unterstützung anderer HTTP/2-Funktionen verwendet.
Das Multiplexing von Anfragen (Multiplexing of Requests) wird erreicht, indem jeder HTTP-Anfrage/Antwort-Austausch mit seinem eigenen Stream (Section 5) verknüpft wird. Streams sind weitgehend unabhängig voneinander, sodass eine blockierte oder blockierte Anfrage oder Antwort den Fortschritt anderer Streams nicht verhindert.
Die effektive Nutzung von Multiplexing hängt von Flusskontrolle (Flow Control) und Priorisierung (Prioritization) ab. Die Flusskontrolle (Section 5.2) stellt sicher, dass multiplexe Streams effizient genutzt werden können, indem die übertragenen Daten auf das beschränkt werden, was der Empfänger verarbeiten kann. Die Priorisierung (Section 5.3) stellt sicher, dass begrenzte Ressourcen am effektivsten genutzt werden. Diese Revision von HTTP/2 verwirft das Prioritätssignalisierungsschema aus [RFC7540].
Da HTTP-Felder, die in einer Verbindung verwendet werden, große Mengen redundanter Daten enthalten können, werden Frames, die sie enthalten, komprimiert (Section 4.3). Dies hat besonders vorteilhafte Auswirkungen auf Anforderungsgrößen im häufigen Fall und ermöglicht es, viele Anfragen in ein Paket zu komprimieren.
Schließlich fügt HTTP/2 einen neuen, optionalen Interaktionsmodus hinzu, bei dem ein Server Antworten an einen Client pushen kann (Section 8.4). Dies soll es einem Server ermöglichen, spekulativ Daten an einen Client zu senden, von denen der Server erwartet, dass der Client sie benötigt, wobei etwas Netzwerknutzung gegen einen potenziellen Latenzgewinn eingetauscht wird. Der Server tut dies, indem er eine Anfrage synthetisiert, die er als PUSH_PROMISE-Frame sendet. Der Server kann dann eine Antwort auf die synthetische Anfrage in einem separaten Stream senden.
2.1. Document Organization (Dokumentorganisation)
Die HTTP/2-Spezifikation ist in vier Teile unterteilt:
-
HTTP/2 starten (Starting HTTP/2, Section 3) behandelt, wie eine HTTP/2-Verbindung initiiert wird.
-
Die Frame-Schicht (Frame Layer, Section 4) und Stream-Schicht (Stream Layer, Section 5) beschreiben, wie HTTP/2-Frames strukturiert und zu multiplexen Streams geformt werden.
-
Frame-Definitionen (Frame Definitions, Section 6) und Fehler-Definitionen (Error Definitions, Section 7) enthalten Details zu den in HTTP/2 verwendeten Frame- und Fehlertypen.
-
HTTP-Zuordnungen (HTTP Mappings, Section 8) und zusätzliche Anforderungen (Additional Requirements, Section 9) beschreiben, wie HTTP-Semantik unter Verwendung von Frames und Streams ausgedrückt wird.
Obwohl einige Frame- und Stream-Schicht-Konzepte von HTTP isoliert sind, definiert diese Spezifikation keine vollständig generische Frame-Schicht. Die Frame- und Stream-Schichten sind auf die Bedürfnisse von HTTP zugeschnitten.
2.2. Conventions and Terminology (Konventionen und Terminologie)
Die Schlüsselwörter "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY" und "OPTIONAL" in diesem Dokument sind gemäß BCP 14 [RFC2119] [RFC8174] zu interpretieren, wenn und nur wenn sie in Großbuchstaben erscheinen, wie hier gezeigt.
Alle numerischen Werte sind in Netzwerk-Byte-Reihenfolge (Network Byte Order). Werte sind vorzeichenlos, sofern nicht anders angegeben. Literalwerte werden je nach Bedarf dezimal oder hexadezimal bereitgestellt. Hexadezimale Literale sind mit "0x" präfixiert, um sie von dezimalen Literalen zu unterscheiden.
Diese Spezifikation beschreibt binäre Formate unter Verwendung der in Abschnitt 1.3 von RFC 9000 [QUIC] beschriebenen Konventionen. Beachten Sie, dass dieses Format Netzwerk-Byte-Reihenfolge verwendet und dass höherwertige Bits vor niederwertigeren Bits aufgelistet werden.
Die folgenden Begriffe werden verwendet:
Client: Der Endpunkt, der eine HTTP/2-Verbindung initiiert. Clients senden HTTP-Anfragen und empfangen HTTP-Antworten.
Verbindung (Connection): Eine Transportschichtverbindung zwischen zwei Endpunkten.
Verbindungsfehler (Connection Error): Ein Fehler, der die gesamte HTTP/2-Verbindung betrifft.
Endpunkt (Endpoint): Entweder der Client oder der Server der Verbindung.
Frame: Die kleinste Kommunikationseinheit innerhalb einer HTTP/2-Verbindung, bestehend aus einem Header und einer variablen Länge von Oktetten, die entsprechend dem Frame-Typ strukturiert sind.
Peer: Ein Endpunkt. Wenn über einen bestimmten Endpunkt diskutiert wird, bezieht sich "Peer" auf den Endpunkt, der dem Hauptgegenstand der Diskussion entfernt ist.
Empfänger (Receiver): Ein Endpunkt, der Frames empfängt.
Sender: Ein Endpunkt, der Frames überträgt.
Server: Der Endpunkt, der eine HTTP/2-Verbindung akzeptiert. Server empfangen HTTP-Anfragen und senden HTTP-Antworten.
Stream: Ein bidirektionaler Fluss von Frames innerhalb der HTTP/2-Verbindung.
Stream-Fehler (Stream Error): Ein Fehler auf dem einzelnen HTTP/2-Stream.
Schließlich sind die Begriffe "Gateway", "Intermediary" (Vermittler), "Proxy" und "Tunnel" in Abschnitt 3.7 von [HTTP] definiert. Vermittler fungieren zu unterschiedlichen Zeiten sowohl als Client als auch als Server.
Der Begriff "Inhalt (Content)", wie er für Nachrichtenkörper gilt, ist in Abschnitt 6.4 von [HTTP] definiert.