2. Panoramica del protocollo HTTP/2 (HTTP/2 Protocol Overview)
HTTP/2 fornisce un trasporto ottimizzato (Optimized Transport) per la semantica HTTP. HTTP/2 supporta tutte le funzionalità principali di HTTP/1.1 ma mira ad essere più efficiente in diversi modi.
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 vengono utilizzati per supportare altre funzionalità HTTP/2.
Il multiplexing (Multiplexing) delle richieste è ottenuto associando ogni scambio richiesta/risposta HTTP al proprio flusso (Stream) (Sezione 5). I flussi sono in gran parte indipendenti l'uno dall'altro, quindi una richiesta o risposta bloccata o bloccata non impedisce il progresso su altri flussi.
Il controllo di flusso (Flow Control) e la prioritizzazione (Prioritization) garantiscono che sia possibile utilizzare in modo efficiente i flussi multiplexati. Il controllo di flusso (Sezione 5.2) aiuta a garantire che vengano trasmessi solo i dati che possono essere utilizzati da un ricevitore. La prioritizzazione (Sezione 5.3) garantisce che le risorse limitate possano essere indirizzate prima ai flussi più importanti.
HTTP/2 aggiunge una nuova modalità di interazione per cui un server può inviare risposte a un client (Sezione 8.2). Il push del server (Server Push) consente a un server di inviare speculativamente dati a un client che il server prevede che il client avrà bisogno, scambiando un po' di utilizzo della rete con un potenziale guadagno di latenza. Il server lo fa sintetizzando una richiesta, che invia come frame PUSH_PROMISE. Il server può quindi inviare una risposta alla richiesta sintetizzata su un flusso separato.
Poiché i campi di intestazione HTTP utilizzati in una connessione possono contenere grandi quantità di dati ridondanti, i frame che li contengono vengono compressi (Sezione 4.3). Ciò ha un impatto particolarmente vantaggioso sulle dimensioni delle richieste nel caso comune, consentendo di comprimere molte richieste in un singolo pacchetto.