2. HTTP/3 Protocol Overview (Panoramica del protocollo HTTP/3)
HTTP/3 fornisce un trasporto per la semantica HTTP utilizzando il protocollo di trasporto QUIC (QUIC Transport Protocol) e un livello di framing interno (Framing Layer) simile a HTTP/2.
Una volta che un client sa che esiste un server HTTP/3 in un determinato endpoint, apre una connessione QUIC. QUIC fornisce negoziazione del protocollo (Protocol Negotiation), multiplexing basato su stream (Stream-Based Multiplexing) e controllo di flusso (Flow Control). La scoperta di un endpoint HTTP/3 è descritta nella sezione 3.1.
All'interno di ogni stream, l'unità di base della comunicazione HTTP/3 è un frame (sezione 7.2). Ogni tipo di frame ha uno scopo diverso. Ad esempio, i frame HEADERS e DATA formano la base delle richieste e risposte HTTP (sezione 4.1). I frame che si applicano all'intera connessione vengono trasmessi su uno stream di controllo dedicato (Control Stream).
Il multiplexing delle richieste viene eseguito utilizzando l'astrazione di stream QUIC (Stream Abstraction), descritta nella sezione 2 di [QUIC-TRANSPORT]. Ogni coppia richiesta-risposta consuma un singolo stream QUIC. Gli stream sono indipendenti l'uno dall'altro, quindi uno stream bloccato o che subisce perdita di pacchetti non impedisce il progresso su altri stream.
Il push del server (Server Push) è una modalità di interazione introdotta in HTTP/2 ([HTTP/2]) che consente a un server di inviare uno scambio richiesta-risposta a un client in previsione della richiesta indicata dal client. Questo scambia l'utilizzo della rete contro un potenziale guadagno di latenza. Diversi frame HTTP/3 vengono utilizzati per gestire il push del server, come PUSH_PROMISE, MAX_PUSH_ID e CANCEL_PUSH.
Come in HTTP/2, i campi di richiesta e risposta (Fields) vengono compressi per la trasmissione. Poiché HPACK ([HPACK]) si basa sulla trasmissione ordinata di sezioni di campi compressi (Field Sections) (una garanzia non fornita da QUIC), HTTP/3 sostituisce HPACK con QPACK ([QPACK]). QPACK utilizza stream unidirezionali separati per modificare e tracciare lo stato della tabella dei campi (Field Table State), mentre le sezioni di campi codificate fanno riferimento allo stato della tabella senza modificarlo.
2.1. Document Organization (Organizzazione del documento)
Le sezioni seguenti forniscono una panoramica dettagliata del ciclo di vita di una connessione HTTP/3:
-
"Connection Setup and Management" (Configurazione e gestione della connessione) (sezione 3) copre come viene scoperto un endpoint HTTP/3 e come viene stabilita una connessione HTTP/3.
-
"Expressing HTTP Semantics in HTTP/3" (Espressione della semantica HTTP in HTTP/3) (sezione 4) descrive come la semantica HTTP viene espressa utilizzando i frame.
-
"Connection Closure" (Chiusura della connessione) (sezione 5) descrive come le connessioni HTTP/3 vengono terminate, sia in modo graduale che brusco.
I dettagli del protocollo wire (Wire Protocol) e le interazioni con il trasporto sono descritti nelle sezioni successive:
-
"Stream Mapping and Usage" (Mappatura e utilizzo dei flussi) (sezione 6) descrive il modo in cui vengono utilizzati gli stream QUIC.
-
"HTTP Framing Layer" (Livello di framing HTTP) (sezione 7) descrive i frame utilizzati sulla maggior parte degli stream.
-
"Error Handling" (Gestione degli errori) (sezione 8) descrive come le condizioni di errore vengono gestite ed espresse, sia su un particolare stream che per la connessione nel suo insieme.
Risorse aggiuntive sono fornite nelle sezioni finali:
-
"Extensions to HTTP/3" (Estensioni a HTTP/3) (sezione 9) descrive come nuove capacità possono essere aggiunte in documenti futuri.
-
Un confronto più dettagliato tra HTTP/2 e HTTP/3 può essere trovato nell'appendice A.
2.2. Conventions and Terminology (Convenzioni e terminologia)
Le parole chiave "MUST" (deve), "MUST NOT" (non deve), "REQUIRED" (richiesto), "SHALL" (deve), "SHALL NOT" (non deve), "SHOULD" (dovrebbe), "SHOULD NOT" (non dovrebbe), "RECOMMENDED" (raccomandato), "NOT RECOMMENDED" (non raccomandato), "MAY" (può) e "OPTIONAL" (opzionale) in questo documento devono essere interpretate come descritto in BCP 14 [RFC2119] [RFC8174] quando, e solo quando, appaiono in maiuscolo, come mostrato qui.
Questo documento utilizza la codifica di interi a lunghezza variabile (Variable-Length Integer Encoding) da [QUIC-TRANSPORT].
Vengono utilizzati i seguenti termini:
abort (interruzione): Una terminazione brusca di una connessione o di uno stream, possibilmente dovuta a una condizione di errore.
client: L'endpoint che avvia una connessione HTTP/3. I client inviano richieste HTTP e ricevono risposte HTTP.
connection (connessione): Una connessione a livello di trasporto tra due endpoint che utilizzano QUIC come protocollo di trasporto.
connection error (errore di connessione): Un errore che influisce sull'intera connessione HTTP/3.
endpoint: Il client o il server della connessione.
frame: L'unità più piccola di comunicazione su uno stream in HTTP/3, costituita da un'intestazione e una sequenza di byte a lunghezza variabile strutturata secondo il tipo di frame.
Elementi di protocollo chiamati "frame" esistono sia in questo documento che in [QUIC-TRANSPORT]. Quando si fa riferimento ai frame di [QUIC-TRANSPORT], il nome del frame sarà preceduto da "QUIC". Ad esempio, "QUIC CONNECTION_CLOSE frames". I riferimenti senza questo prefisso si riferiscono ai frame definiti nella sezione 7.2.
HTTP/3 connection (connessione HTTP/3): Una connessione QUIC in cui il protocollo applicativo negoziato è HTTP/3.
peer: Un endpoint. Quando si discute di un particolare endpoint, "peer" si riferisce all'endpoint remoto rispetto al soggetto principale della discussione.
receiver (ricevitore): Un endpoint che sta ricevendo frame.
sender (mittente): Un endpoint che sta trasmettendo frame.
server: L'endpoint che accetta una connessione HTTP/3. I server ricevono richieste HTTP e inviano risposte HTTP.
stream (flusso): Un flusso di byte bidirezionale o unidirezionale (Bytestream) fornito dal trasporto QUIC. Tutti gli stream all'interno di una connessione HTTP/3 possono essere considerati "stream HTTP/3", ma all'interno di HTTP/3 sono definiti più tipi di stream.
stream error (errore di stream): Un errore a livello di applicazione sullo stream individuale.
Il termine "content" (contenuto) è definito nella sezione 6.4 di [HTTP].
Infine, i termini "resource" (risorsa), "message" (messaggio), "user agent" (agente utente), "origin server" (server di origine), "gateway", "intermediary" (intermediario), "proxy" e "tunnel" sono definiti nella sezione 3 di [HTTP].
I diagrammi di pacchetto (Packet Diagrams) in questo documento utilizzano il formato definito nella sezione 1.3 di [QUIC-TRANSPORT] per illustrare l'ordine e la dimensione dei campi.