Passa al contenuto principale

2. Panoramica del Protocollo HTTP/2

HTTP/2 fornisce un trasporto ottimizzato per la semantica HTTP. HTTP/2 supporta tutte le funzionalità principali di HTTP ma mira a essere più efficiente di HTTP/1.1.

HTTP/2 è un protocollo di livello applicazione orientato alla connessione che funziona su una connessione TCP ([TCP]). Il client è l'iniziatore della connessione TCP.

L'unità di protocollo di base in HTTP/2 è un frame (Sezione 4.1). Ogni tipo di frame serve uno scopo diverso. Ad esempio, i frame HEADERS e DATA formano la base delle richieste e risposte HTTP (Sezione 8.1); altri tipi di frame come SETTINGS, WINDOW_UPDATE e PUSH_PROMISE sono utilizzati a supporto di altre funzionalità HTTP/2.

Il multiplexing delle richieste è ottenuto associando ogni scambio richiesta/risposta HTTP al proprio stream (Sezione 5). Gli stream sono in gran parte indipendenti l'uno dall'altro, quindi una richiesta o risposta bloccata o in stallo non impedisce il progresso su altri stream.

L'uso efficace del multiplexing dipende dal controllo di flusso e dalla prioritizzazione. Il controllo di flusso (Sezione 5.2) garantisce che sia possibile utilizzare efficacemente gli stream multiplexati limitando i dati trasmessi a ciò che il ricevitore è in grado di gestire. La prioritizzazione (Sezione 5.3) garantisce che le risorse limitate siano utilizzate nel modo più efficace. Questa revisione di HTTP/2 depreca lo schema di segnalazione della priorità da [RFC7540].

Poiché i campi HTTP utilizzati in una connessione possono contenere grandi quantità di dati ridondanti, i frame che li contengono sono compressi (Sezione 4.3). Questo ha un impatto particolarmente vantaggioso sulle dimensioni delle richieste nel caso comune, consentendo di comprimere molte richieste in un pacchetto.

Infine, HTTP/2 aggiunge una nuova modalità di interazione opzionale in cui un server può inviare (o "push") risposte a un client (Sezione 8.4). Questo è inteso per consentire a un server di inviare speculativamente dati a un client che il server anticipa che il client avrà bisogno, scambiando un certo utilizzo della rete contro un potenziale guadagno di latenza. Il server fa questo sintetizzando una richiesta, che invia come frame PUSH_PROMISE. Il server è quindi in grado di inviare una risposta alla richiesta sintetica su uno stream separato.

2.1. Organizzazione del Documento

La specifica HTTP/2 è divisa in quattro parti:

  • Avvio di HTTP/2 (Sezione 3) copre come viene iniziata una connessione HTTP/2.

  • I livelli frame (Sezione 4) e stream (Sezione 5) descrivono il modo in cui i frame HTTP/2 sono strutturati e formati in stream multiplexati.

  • Le definizioni di frame (Sezione 6) e di errore (Sezione 7) includono i dettagli dei tipi di frame ed errore utilizzati in HTTP/2.

  • I mapping HTTP (Sezione 8) e i requisiti aggiuntivi (Sezione 9) descrivono come la semantica HTTP è espressa utilizzando frame e stream.

Sebbene alcuni dei concetti di livello frame e stream siano isolati da HTTP, questa specifica non definisce un livello frame completamente generico. I livelli frame e stream sono adattati alle esigenze di HTTP.

2.2. Convenzioni e Terminologia

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.

Tutti i valori numerici sono in ordine di byte di rete. I valori sono senza segno salvo diversa indicazione. I valori letterali sono forniti in decimale o esadecimale a seconda dei casi. I letterali esadecimali sono preceduti da "0x" per distinguerli dai letterali decimali.

Questa specifica descrive i formati binari utilizzando le convenzioni descritte nella Sezione 1.3 di RFC 9000 [QUIC]. Si noti che questo formato utilizza l'ordine di byte di rete e che i bit di valore alto sono elencati prima dei bit di valore basso.

I seguenti termini sono utilizzati:

client: L'endpoint che inizia una connessione HTTP/2. I client inviano richieste HTTP e ricevono risposte HTTP.

connection: Una connessione di livello di trasporto tra due endpoint.

connection error: Un errore che rende inutilizzabile l'intera connessione HTTP/2.

endpoint: O il client o il server della connessione.

frame: La più piccola unità di comunicazione all'interno di una connessione HTTP/2, composta da un header e una sequenza di ottetti di lunghezza variabile strutturata secondo il tipo di frame.

peer: Un endpoint. Quando si discute di un particolare endpoint, "peer" si riferisce all'endpoint che è remoto rispetto al soggetto principale della discussione.

receiver: Un endpoint che sta ricevendo frame.

sender: Un endpoint che sta trasmettendo frame.

server: L'endpoint che accetta una connessione HTTP/2. I server ricevono richieste HTTP e inviano risposte HTTP.

stream: Un flusso bidirezionale di frame all'interno della connessione HTTP/2.

stream error: Un errore sul singolo stream HTTP/2.

Infine, i termini "gateway", "intermediary", "proxy" e "tunnel" sono definiti nella Sezione 3.7 di [HTTP]. Gli intermediari agiscono sia come client che come server in momenti diversi.

Il termine "content" come si applica ai corpi dei messaggi è definito nella Sezione 6.4 di [HTTP].