Passa al contenuto principale

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