Appendice A. Considerazioni per la transizione da HTTP/2 (Considerations for Transitioning from HTTP/2)
HTTP/3 si basa sul design di HTTP/2 e condivide la semantica di base. Questa appendice riassume le principali differenze tra HTTP/2 e HTTP/3 per aiutare gli implementatori a comprendere la relazione tra i due protocolli.
A.1. Flussi (Streams)
HTTP/3 utilizza i flussi QUIC, mentre HTTP/2 utilizza un'astrazione di flusso su TCP. Differenze chiave:
- Identificatori di flusso: Gli ID di flusso in HTTP/3 sono assegnati da QUIC, non da HTTP/3
- Priorità dei flussi: HTTP/3 non include lo schema di priorità dei flussi di HTTP/2
- Controllo del flusso: HTTP/3 utilizza i meccanismi di controllo del flusso di QUIC
A.2. Tipi di frame HTTP (HTTP Frame Types)
Molti tipi di frame HTTP/2 sono preservati o modificati in HTTP/3:
Tipi di frame preservati:
- DATA (0x00) - Funzionalità simile
- HEADERS (0x01) - Funzionalità simile
- SETTINGS (0x04) - Simile ma solo sul flusso di controllo
- PUSH_PROMISE (0x05) - Funzionalità simile
- GOAWAY (0x07) - Funzionalità simile
Tipi di frame HTTP/2 rimossi o sostituiti:
- PRIORITY (0x02) - Rimosso in HTTP/3
- RST_STREAM (0x03) - Sostituito da RESET_STREAM di QUIC
- PING (0x06) - Sostituito dal frame PING di QUIC
- WINDOW_UPDATE (0x08) - Sostituito dal controllo del flusso di QUIC
- CONTINUATION (0x09) - Non necessario in HTTP/3
Nuovi tipi di frame in HTTP/3:
- CANCEL_PUSH (0x03) - Annullare il push del server
- MAX_PUSH_ID (0x0d) - Controllare lo spazio ID push
A.3. Parametri SETTINGS HTTP/2 (HTTP/2 SETTINGS Parameters)
Le impostazioni in HTTP/3 differiscono da HTTP/2:
Impostazioni rimosse:
- SETTINGS_HEADER_TABLE_SIZE - Sostituito dalle impostazioni QPACK
- SETTINGS_ENABLE_PUSH - Controllato tramite MAX_PUSH_ID
- SETTINGS_MAX_CONCURRENT_STREAMS - Controllato dai parametri di trasporto QUIC
- SETTINGS_INITIAL_WINDOW_SIZE - Sostituito dal controllo del flusso QUIC
- SETTINGS_MAX_FRAME_SIZE - Non necessario in HTTP/3
- SETTINGS_MAX_HEADER_LIST_SIZE - Sostituito da SETTINGS_MAX_FIELD_SECTION_SIZE
Impostazioni preservate:
- SETTINGS_MAX_FIELD_SECTION_SIZE (0x06) - Simile a SETTINGS_MAX_HEADER_LIST_SIZE di HTTP/2
A.4. Codici di errore HTTP/2 (HTTP/2 Error Codes)
HTTP/3 definisce il proprio insieme di codici di errore che differiscono dai codici di errore di HTTP/2. Gli implementatori dovrebbero notare le relazioni di mappatura ma non dovrebbero assumere una corrispondenza diretta uno-a-uno.
A.5. Altre differenze (Other Differences)
Gestione della connessione:
- HTTP/3 utilizza la gestione delle connessioni di QUIC, inclusa la migrazione della connessione e il supporto multipath
- Il preambolo di connessione di HTTP/2 non è necessario
Push del server:
- Il meccanismo di push del server in HTTP/3 è simile a HTTP/2 ma utilizza frame e tipi di flusso diversi
- Gli ID push sono espliciti in HTTP/3
Compressione dei campi:
- HTTP/3 utilizza QPACK invece di HPACK
- QPACK è progettato per gestire la consegna fuori ordine
Estensibilità:
- HTTP/3 fornisce meccanismi di estensione più flessibili
- I nuovi tipi di frame, impostazioni e tipi di flusso possono essere utilizzati senza negoziazione