Passa al contenuto principale

1. Introduzione (Introduction)

Il protocollo di trasporto QUIC ([QUIC-TRANSPORT]) è progettato per supportare la semantica HTTP, e il suo design comprende molte funzionalità di HTTP/2 ([HTTP/2]). HTTP/2 utilizza HPACK ([RFC7541]) per la compressione delle sezioni di header e trailer. Se HPACK fosse utilizzato per HTTP/3 ([HTTP/3]), indurrebbe un blocco head-of-line per le sezioni di campo a causa di assunzioni incorporate di un ordine totale tra i frame su tutti gli stream.

QPACK riutilizza i concetti fondamentali di HPACK, ma è ridisegnato per consentire la correzione in presenza di consegna non ordinata, con flessibilità per le implementazioni di bilanciare tra resilienza contro il blocco head-of-line e tasso di compressione ottimale. Gli obiettivi di progettazione sono di avvicinarsi strettamente al tasso di compressione di HPACK con sostanzialmente meno blocco head-of-line nelle stesse condizioni di perdita.

1.1 Convenzioni e definizioni (Conventions and Definitions)

Le parole chiave "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY" e "OPTIONAL" in questo documento devono essere interpretate come descritto in BCP 14 [RFC2119] [RFC8174] quando, e solo quando, appaiono in maiuscolo, come mostrato qui.

I seguenti termini sono utilizzati in questo documento:

Campi HTTP (HTTP fields): Metadati inviati come parte di un messaggio HTTP. Il termine comprende sia i campi di header che di trailer. Colloquialmente, il termine "header" è stato spesso utilizzato per riferirsi ai campi di header e trailer HTTP; questo documento utilizza "campi" per generalità.

Riga di campo HTTP (HTTP field line): Una coppia nome-valore inviata come parte di una sezione di campo HTTP. Vedere le sezioni 6.3 e 6.5 di [HTTP].

Valore di campo HTTP (HTTP field value): Dati associati a un nome di campo, costituiti da tutti i valori di riga di campo con quel nome di campo in quella sezione, concatenati con separatori virgola.

Sezione di campo (Field section): Collezione ordinata di righe di campo HTTP associate a un messaggio HTTP. Una sezione di campo può contenere più righe di campo con lo stesso nome. Può anche contenere righe di campo duplicate. Un messaggio HTTP può includere sia sezioni di header che di trailer.

Rappresentazione (Representation): Istruzione che rappresenta una riga di campo, possibilmente facendo riferimento alle tabelle dinamica e statica.

Encoder: Implementazione che codifica le sezioni di campo.

Decoder: Implementazione che decodifica le sezioni di campo codificate.

Indice assoluto (Absolute Index): Indice unico per ogni voce nella tabella dinamica.

Base (Base): Punto di riferimento per gli indici relativi e post-Base. Le rappresentazioni che fanno riferimento a voci di tabella dinamica sono relative a una Base.

Insert Count: Numero totale di voci inserite nella tabella dinamica.

Si noti che QPACK è un nome, non un'abbreviazione.

1.2 Convenzioni di notazione (Notational Conventions)

I diagrammi in questo documento utilizzano il formato descritto nella sezione 3.1 di [RFC2360], con le seguenti convenzioni aggiuntive:

x (A): Indica che x è lungo A bit.

x (A+): Indica che x utilizza la codifica di interi con prefisso definita nella sezione 4.1.1, iniziando con un prefisso di A bit.

x ...: Indica che x ha lunghezza variabile e si estende fino alla fine della regione.