1. Introduction (Introduzione)
La semantica HTTP (HTTP Semantics) ([HTTP]) viene utilizzata per un'ampia gamma di servizi su Internet. Questa semantica è stata utilizzata più comunemente con HTTP/1.1 e HTTP/2. HTTP/1.1 è stato utilizzato su una varietà di livelli di trasporto e sessione, mentre HTTP/2 è stato utilizzato principalmente con TLS su TCP. HTTP/3 supporta la stessa semantica su un nuovo protocollo di trasporto: QUIC.
1.1. Prior Versions of HTTP (Versioni precedenti di HTTP)
HTTP/1.1 ([HTTP/1.1]) utilizza campi di testo delimitati da spazi per trasmettere i messaggi HTTP. Sebbene questi scambi siano leggibili dall'uomo, l'uso di spazi per la formattazione dei messaggi porta a complessità di analisi e tolleranza eccessiva di comportamenti varianti.
Poiché HTTP/1.1 non include un livello di multiplexing (Multiplexing Layer), vengono spesso utilizzate più connessioni TCP per gestire le richieste in parallelo. Tuttavia, ciò ha un impatto negativo sul controllo della congestione (Congestion Control) e sull'efficienza della rete, poiché TCP non condivide il controllo della congestione tra più connessioni.
HTTP/2 ([HTTP/2]) ha introdotto un livello di framing binario (Binary Framing) e di multiplexing per migliorare la latenza senza modificare il livello di trasporto. Tuttavia, poiché la natura parallela del multiplexing di HTTP/2 non è visibile ai meccanismi di recupero delle perdite (Loss Recovery Mechanisms) di TCP, un pacchetto perso o riordinato causa uno stallo (Stall) di tutte le transazioni attive, indipendentemente dal fatto che quella transazione sia stata direttamente impattata dal pacchetto perso.
1.2. Delegation to QUIC (Delega a QUIC)
Il protocollo di trasporto QUIC (QUIC Transport Protocol) incorpora il multiplexing dei flussi (Stream Multiplexing) e il controllo di flusso per stream (Per-Stream Flow Control), simile a quello fornito dal livello di framing HTTP/2. Fornendo affidabilità (Reliability) a livello di stream e controllo della congestione su tutta la connessione, QUIC ha la capacità di migliorare le prestazioni di HTTP rispetto a una mappatura TCP. QUIC incorpora anche TLS 1.3 ([TLS]) a livello di trasporto, offrendo riservatezza (Confidentiality) e integrità (Integrity) comparabili all'esecuzione di TLS su TCP, con la latenza di configurazione della connessione migliorata di TCP Fast Open ([TFO]).
Questo documento definisce HTTP/3: una mappatura della semantica HTTP sul protocollo di trasporto QUIC, attingendo pesantemente al design di HTTP/2. HTTP/3 si basa su QUIC per fornire protezione della riservatezza e dell'integrità dei dati, autenticazione peer (Peer Authentication) e consegna affidabile, ordinata e per stream. Delegando i problemi di durata del flusso (Stream Lifetime) e di controllo di flusso a QUIC, viene utilizzato un framing binario simile al framing HTTP/2 su ciascun stream. Alcune funzionalità HTTP/2 sono sussume da QUIC, mentre altre funzionalità sono implementate su QUIC.
QUIC è descritto in [QUIC-TRANSPORT]. Per una descrizione completa di HTTP/2, vedere [HTTP/2].