1. Einführung (Introduction)
Das QUIC-Transportprotokoll ([QUIC-TRANSPORT]) ist darauf ausgelegt, HTTP-Semantik zu unterstützen, und sein Design umfasst viele Funktionen von HTTP/2 ([HTTP/2]). HTTP/2 verwendet HPACK ([RFC7541]) für die Komprimierung von Header- und Trailer-Abschnitten. Wenn HPACK für HTTP/3 ([HTTP/3]) verwendet würde, würde es ein Head-of-Line Blocking für Feldabschnitte aufgrund von eingebauten Annahmen einer Gesamtordnung zwischen Frames auf allen Streams verursachen.
QPACK verwendet die Kernkonzepte von HPACK wieder, ist aber so umgestaltet, dass es Korrektur bei ungeordneter Zustellung ermöglicht, mit Flexibilität für Implementierungen, um zwischen Widerstandsfähigkeit gegen Head-of-Line Blocking und optimaler Komprimierungsrate abzuwägen. Die Designziele sind, sich eng an die Komprimierungsrate von HPACK anzunähern mit wesentlich weniger Head-of-Line Blocking unter denselben Verlustbedingungen.
1.1 Konventionen und Definitionen (Conventions and Definitions)
Die Schlüsselwörter „MUST", „MUST NOT", „REQUIRED", „SHALL", „SHALL NOT", „SHOULD", „SHOULD NOT", „RECOMMENDED", „NOT RECOMMENDED", „MAY" und „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.
Die folgenden Begriffe werden in diesem Dokument verwendet:
HTTP-Felder (HTTP fields): Metadaten, die als Teil einer HTTP-Nachricht gesendet werden. Der Begriff umfasst sowohl Header- als auch Trailer-Felder. Umgangssprachlich wurde der Begriff „Header" oft verwendet, um sich auf HTTP-Header- und Trailer-Felder zu beziehen; dieses Dokument verwendet „Felder" zur Allgemeinheit.
HTTP-Feldzeile (HTTP field line): Ein Name-Wert-Paar, das als Teil eines HTTP-Feldabschnitts gesendet wird. Siehe Abschnitte 6.3 und 6.5 von [HTTP].
HTTP-Feldwert (HTTP field value): Daten, die mit einem Feldnamen verbunden sind, bestehend aus allen Feldzeilenwerten mit diesem Feldnamen in diesem Abschnitt, verkettet mit Kommatrennzeichen.
Feldabschnitt (Field section): Geordnete Sammlung von HTTP-Feldzeilen, die mit einer HTTP-Nachricht verbunden sind. Ein Feldabschnitt kann mehrere Feldzeilen mit demselben Namen enthalten. Er kann auch doppelte Feldzeilen enthalten. Eine HTTP-Nachricht kann sowohl Header- als auch Trailer-Abschnitte enthalten.
Darstellung (Representation): Anweisung, die eine Feldzeile darstellt, möglicherweise durch Verweis auf die dynamische und statische Tabelle.
Encoder: Implementierung, die Feldabschnitte kodiert.
Decoder: Implementierung, die kodierte Feldabschnitte dekodiert.
Absoluter Index (Absolute Index): Eindeutiger Index für jeden Eintrag in der dynamischen Tabelle.
Basis (Base): Referenzpunkt für relative und Post-Basis-Indizes. Darstellungen, die dynamische Tabelleneinträge referenzieren, sind relativ zu einer Basis.
Insert Count: Gesamtzahl der in die dynamische Tabelle eingefügten Einträge.
Beachten Sie, dass QPACK ein Name und keine Abkürzung ist.
1.2 Notationskonventionen (Notational Conventions)
Diagramme in diesem Dokument verwenden das in Abschnitt 3.1 von [RFC2360] beschriebene Format mit den folgenden zusätzlichen Konventionen:
x (A): Gibt an, dass x A Bits lang ist.
x (A+): Gibt an, dass x die in Abschnitt 4.1.1 definierte präfixierte Integer-Kodierung verwendet, beginnend mit einem A-Bit-Präfix.
x ...: Gibt an, dass x variable Länge hat und sich bis zum Ende der Region erstreckt.