Note
HTTP/2 è una versione di HTTP che mira a ridurre la latenza dei trasferimenti con più oggetti e a risolvere alcuni problemi di HTTP/1.1
A differenza delle versioni precedenti HTTP/2:
- È in formato binario e non testuale
- Utilizza una singola connessione TCP per stream multipli
- Comprime gli header
- Aggiunge un servizio di server push e un servizio di controllo di flusso a livello applicativo
- Si appoggia di default su TLS
Header HTTP2

Il campo type può essere:
| Campo | Descrizione |
|---|---|
DATA | Trasporta dati di uno stream |
HEADERS | Apre uno stream |
PRIORITY | Specifica priorità di uno stream |
RST_STREAM | Termina uno stream |
SETTINGS | Trasporta parametri di configurazione |
PUSH_PROMISE | Gestisce il servizio di push |
PING,GOAWAY,WINDOWS_UPDATE,CONTINUATION | Chiude una connessione |
Compressione degli header
Siccome l’header di una richiesta può avere dimensioni non trascurabili utilizziamo le seguenti tecniche per comprimerlo:
- Codifica di Huffman: Assegno stringhe binarie ai simboli più comuni
- Indexing: Assegno un indice alle header line più comuni e invio solo l’indice
- Codifica differenziale: L’header riporta solo le differenze rispetto all’header precedente
Multiplazione e server push
Note
In HTTP2 lo scambio di frame tra client e server è organizzato in stream. Il server può inviare al client delle informazioni utili senza che ne faccia esplicita richiesta (server push). Questo è usato generalmente per i file HTML che richiedono oggetti aggiuntivi (CSS, JS, immagini, ecc).
HTTPS
Note
Per encrittare la connessione HTTP possiamo utilizzare i protocolli SSL (Secure Socket Layer) e TLS (Transport Layer Security), che aggiungono confidenzialità, integrità e autenticazione alla connessioni TCP.
La procedura di connessione SSL/TLS si divide nei seguenti passaggi:
- Handshake: Il server e il client si accordano sul tipo di cifratura da applicare ai dati. Generalmente il client e il server si scambiano i certificati di identità, il server invia una chiave pubblica assieme a delle info aggiuntive, genera delle chiavi simmetriche per le cifrature del trasferimento dati e le chiavi simmetriche sono scambiate su una connessione cifrata con altrettante chiavi asimmetriche.
- Trasferimento dei dati: I dati sono suddivisi in PDU, che saranno cifrate con l’algoritmo scelto in precedenza.
- Chiusura della connessione: Si usa un messaggio speciale per chiudere la connessione in modo sicuro.