Aller au contenu principal

1. Introduction

Le protocole de transport QUIC ([QUIC-TRANSPORT]) est conçu pour prendre en charge la sémantique HTTP, et sa conception englobe de nombreuses fonctionnalités de HTTP/2 ([HTTP/2]). HTTP/2 utilise HPACK ([RFC7541]) pour la compression des sections d'en-tête et de fin. Si HPACK était utilisé pour HTTP/3 ([HTTP/3]), il induirait un blocage en tête de ligne pour les sections de champs en raison d'hypothèses intégrées d'un ordre total entre les trames sur tous les flux.

QPACK réutilise les concepts de base de HPACK, mais est reconçu pour permettre la correction en présence de livraison non ordonnée, avec une flexibilité pour les implémentations d'équilibrer entre la résilience contre le blocage en tête de ligne et le taux de compression optimal. Les objectifs de conception sont de s'approcher étroitement du taux de compression de HPACK avec substantiellement moins de blocage en tête de ligne dans les mêmes conditions de perte.

1.1 Conventions et définitions (Conventions and Definitions)

Les mots-clés « MUST », « MUST NOT », « REQUIRED », « SHALL », « SHALL NOT », « SHOULD », « SHOULD NOT », « RECOMMENDED », « NOT RECOMMENDED », « MAY », et « OPTIONAL » dans ce document doivent être interprétés comme décrit dans BCP 14 [RFC2119] [RFC8174] lorsque, et seulement lorsque, ils apparaissent en majuscules, comme montré ici.

Les termes suivants sont utilisés dans ce document :

Champs HTTP (HTTP fields) : Métadonnées envoyées dans le cadre d'un message HTTP. Le terme englobe à la fois les champs d'en-tête et de fin. Familièrement, le terme « en-têtes » a souvent été utilisé pour faire référence aux champs d'en-tête et de fin HTTP ; ce document utilise « champs » pour la généralité.

Ligne de champ HTTP (HTTP field line) : Une paire nom-valeur envoyée dans le cadre d'une section de champ HTTP. Voir les sections 6.3 et 6.5 de [HTTP].

Valeur de champ HTTP (HTTP field value) : Données associées à un nom de champ, composées de toutes les valeurs de ligne de champ avec ce nom de champ dans cette section, concaténées avec des séparateurs virgule.

Section de champ (Field section) : Collection ordonnée de lignes de champ HTTP associées à un message HTTP. Une section de champ peut contenir plusieurs lignes de champ avec le même nom. Elle peut également contenir des lignes de champ en double. Un message HTTP peut inclure à la fois des sections d'en-tête et de fin.

Représentation (Representation) : Instruction qui représente une ligne de champ, éventuellement par référence aux tables dynamique et statique.

Encodeur (Encoder) : Implémentation qui encode les sections de champ.

Décodeur (Decoder) : Implémentation qui décode les sections de champ encodées.

Index absolu (Absolute Index) : Index unique pour chaque entrée dans la table dynamique.

Base (Base) : Point de référence pour les index relatifs et post-Base. Les représentations qui référencent des entrées de table dynamique sont relatives à une Base.

Comptage d'insertions (Insert Count) : Nombre total d'entrées insérées dans la table dynamique.

Notez que QPACK est un nom, et non une abréviation.

1.2 Conventions de notation (Notational Conventions)

Les diagrammes dans ce document utilisent le format décrit dans la section 3.1 de [RFC2360], avec les conventions supplémentaires suivantes :

x (A) : Indique que x est long de A bits.

x (A+) : Indique que x utilise l'encodage d'entier préfixé défini dans la section 4.1.1, commençant par un préfixe de A bits.

x ... : Indique que x est de longueur variable et s'étend jusqu'à la fin de la région.