2. HTTP/3 Protocol Overview (HTTP/3-Protokollübersicht)
HTTP/3 bietet einen Transport für HTTP-Semantik unter Verwendung des QUIC-Transportprotokolls (QUIC Transport Protocol) und einer internen Framing-Schicht (Framing Layer), die HTTP/2 ähnelt.
Sobald ein Client weiß, dass an einem bestimmten Endpunkt ein HTTP/3-Server existiert, öffnet er eine QUIC-Verbindung. QUIC bietet Protokollverhandlung (Protocol Negotiation), streambasiertes Multiplexing (Stream-Based Multiplexing) und Flusskontrolle (Flow Control). Die Erkennung eines HTTP/3-Endpunkts wird in Abschnitt 3.1 beschrieben.
Innerhalb jedes Streams ist die Grundeinheit der HTTP/3-Kommunikation ein Frame (Abschnitt 7.2). Jeder Frame-Typ dient einem anderen Zweck. Beispielsweise bilden HEADERS- und DATA-Frames die Grundlage von HTTP-Anfragen und -Antworten (Abschnitt 4.1). Frames, die für die gesamte Verbindung gelten, werden über einen dedizierten Kontrollstream (Control Stream) übertragen.
Das Multiplexing von Anfragen wird unter Verwendung der QUIC-Stream-Abstraktion (Stream Abstraction) durchgeführt, die in Abschnitt 2 von [QUIC-TRANSPORT] beschrieben wird. Jedes Anfrage-Antwort-Paar verbraucht einen einzelnen QUIC-Stream. Streams sind unabhängig voneinander, sodass ein blockierter Stream oder ein Stream mit Paketverlust den Fortschritt anderer Streams nicht verhindert.
Server-Push (Server Push) ist ein in HTTP/2 ([HTTP/2]) eingeführter Interaktionsmodus, der es einem Server ermöglicht, einen Anfrage-Antwort-Austausch an einen Client zu pushen, in Erwartung, dass der Client die angegebene Anfrage stellt. Dies tauscht Netzwerknutzung gegen einen potenziellen Latenzgewinn. Mehrere HTTP/3-Frames werden zur Verwaltung von Server-Push verwendet, wie PUSH_PROMISE, MAX_PUSH_ID und CANCEL_PUSH.
Wie in HTTP/2 werden Anfrage- und Antwortfelder (Fields) für die Übertragung komprimiert. Da HPACK ([HPACK]) auf der geordneten Übertragung komprimierter Feldabschnitte (Field Sections) beruht (eine Garantie, die QUIC nicht bietet), ersetzt HTTP/3 HPACK durch QPACK ([QPACK]). QPACK verwendet separate unidirektionale Streams, um den Feldtabellenstatus (Field Table State) zu ändern und zu verfolgen, während codierte Feldabschnitte auf den Status der Tabelle verweisen, ohne ihn zu ändern.
2.1. Document Organization (Dokumentorganisation)
Die folgenden Abschnitte bieten einen detaillierten Überblick über den Lebenszyklus einer HTTP/3-Verbindung:
-
"Connection Setup and Management" (Verbindungsaufbau und -verwaltung) (Abschnitt 3) behandelt, wie ein HTTP/3-Endpunkt erkannt und eine HTTP/3-Verbindung hergestellt wird.
-
"Expressing HTTP Semantics in HTTP/3" (HTTP-Semantik in HTTP/3 ausdrücken) (Abschnitt 4) beschreibt, wie HTTP-Semantik mithilfe von Frames ausgedrückt wird.
-
"Connection Closure" (Verbindungsabschluss) (Abschnitt 5) beschreibt, wie HTTP/3-Verbindungen entweder ordnungsgemäß oder abrupt beendet werden.
Die Details des Drahtprotokolls (Wire Protocol) und die Interaktionen mit dem Transport werden in nachfolgenden Abschnitten beschrieben:
-
"Stream Mapping and Usage" (Stream-Zuordnung und -Verwendung) (Abschnitt 6) beschreibt die Art und Weise, wie QUIC-Streams verwendet werden.
-
"HTTP Framing Layer" (HTTP-Framing-Schicht) (Abschnitt 7) beschreibt die Frames, die auf den meisten Streams verwendet werden.
-
"Error Handling" (Fehlerbehandlung) (Abschnitt 8) beschreibt, wie Fehlerbedingungen behandelt und ausgedrückt werden, entweder auf einem bestimmten Stream oder für die Verbindung als Ganzes.
Zusätzliche Ressourcen werden in den abschließenden Abschnitten bereitgestellt:
-
"Extensions to HTTP/3" (Erweiterungen zu HTTP/3) (Abschnitt 9) beschreibt, wie neue Funktionen in zukünftigen Dokumenten hinzugefügt werden können.
-
Ein detaillierterer Vergleich zwischen HTTP/2 und HTTP/3 findet sich in Anhang A.
2.2. Conventions and Terminology (Konventionen und Terminologie)
Die Schlüsselwörter "MUST" (muss), "MUST NOT" (darf nicht), "REQUIRED" (erforderlich), "SHALL" (muss), "SHALL NOT" (darf nicht), "SHOULD" (sollte), "SHOULD NOT" (sollte nicht), "RECOMMENDED" (empfohlen), "NOT RECOMMENDED" (nicht empfohlen), "MAY" (kann) und "OPTIONAL" (optional) in diesem Dokument sind wie in BCP 14 [RFC2119] [RFC8174] beschrieben zu interpretieren, wenn und nur wenn sie in Großbuchstaben erscheinen, wie hier gezeigt.
Dieses Dokument verwendet die Kodierung von Ganzzahlen variabler Länge (Variable-Length Integer Encoding) aus [QUIC-TRANSPORT].
Die folgenden Begriffe werden verwendet:
abort (Abbruch): Eine abrupte Beendigung einer Verbindung oder eines Streams, möglicherweise aufgrund einer Fehlerbedingung.
client (Client): Der Endpunkt, der eine HTTP/3-Verbindung initiiert. Clients senden HTTP-Anfragen und empfangen HTTP-Antworten.
connection (Verbindung): Eine Transportschichtverbindung zwischen zwei Endpunkten, die QUIC als Transportprotokoll verwendet.
connection error (Verbindungsfehler): Ein Fehler, der die gesamte HTTP/3-Verbindung betrifft.
endpoint (Endpunkt): Entweder der Client oder der Server der Verbindung.
frame (Frame): Die kleinste Kommunikationseinheit auf einem Stream in HTTP/3, bestehend aus einem Header und einer Bytesequenz variabler Länge, die entsprechend dem Frame-Typ strukturiert ist.
Protokollelemente, die "Frames" genannt werden, existieren sowohl in diesem Dokument als auch in [QUIC-TRANSPORT]. Wenn auf Frames aus [QUIC-TRANSPORT] verwiesen wird, wird dem Frame-Namen "QUIC" vorangestellt. Zum Beispiel "QUIC CONNECTION_CLOSE frames". Verweise ohne dieses Präfix beziehen sich auf Frames, die in Abschnitt 7.2 definiert sind.
HTTP/3 connection (HTTP/3-Verbindung): Eine QUIC-Verbindung, bei der das ausgehandelte Anwendungsprotokoll HTTP/3 ist.
peer (Peer): Ein Endpunkt. Bei der Diskussion eines bestimmten Endpunkts bezieht sich "peer" auf den Endpunkt, der vom Hauptthema der Diskussion entfernt ist.
receiver (Empfänger): Ein Endpunkt, der Frames empfängt.
sender (Sender): Ein Endpunkt, der Frames überträgt.
server (Server): Der Endpunkt, der eine HTTP/3-Verbindung akzeptiert. Server empfangen HTTP-Anfragen und senden HTTP-Antworten.
stream (Stream): Ein bidirektionaler oder unidirektionaler Bytestrom (Bytestream), der vom QUIC-Transport bereitgestellt wird. Alle Streams innerhalb einer HTTP/3-Verbindung können als "HTTP/3-Streams" betrachtet werden, aber innerhalb von HTTP/3 sind mehrere Stream-Typen definiert.
stream error (Stream-Fehler): Ein Fehler auf Anwendungsebene auf dem einzelnen Stream.
Der Begriff "content" (Inhalt) ist in Abschnitt 6.4 von [HTTP] definiert.
Schließlich sind die Begriffe "resource" (Ressource), "message" (Nachricht), "user agent" (Benutzeragent), "origin server" (Ursprungsserver), "gateway" (Gateway), "intermediary" (Vermittler), "proxy" (Proxy) und "tunnel" (Tunnel) in Abschnitt 3 von [HTTP] definiert.
Paketdiagramme (Packet Diagrams) in diesem Dokument verwenden das in Abschnitt 1.3 von [QUIC-TRANSPORT] definierte Format, um die Reihenfolge und Größe von Feldern zu veranschaulichen.