4. Il frame ALTSVC HTTP/2
Il frame HTTP/2 ALTSVC ([RFC7540], Sezione 4) annuncia la disponibilità di un servizio alternativo a un client HTTP/2.
Il frame ALTSVC è un'estensione non critica di HTTP/2. Gli endpoint che non supportano questo frame lo ignoreranno (secondo le regole di estensibilità definite nella Sezione 4.1 della [RFC7540]).
Un frame ALTSVC da un server a un client su un flusso diverso dal flusso 0 indica che il servizio alternativo trasmesso è associato all'origine di quel flusso.
Un frame ALTSVC da un server a un client sul flusso 0 indica che il servizio alternativo trasmesso è associato all'origine contenuta nel campo Origin del frame. Un'associazione con un'origine che il client non considera autorevole per la connessione corrente DEVE essere ignorata.
Il tipo di frame ALTSVC è 0xa (decimale 10).
+-------------------------------+-------------------------------+
| Origin-Len (16) | Origin? (*) ...
+-------------------------------+-------------------------------+
| Alt-Svc-Field-Value (*) ...
+---------------------------------------------------------------+
Payload del frame ALTSVC
Il frame ALTSVC contiene i seguenti campi:
- Origin-Len: Un intero senza segno a 16 bit che indica la lunghezza, in ottetti, del campo Origin.
- Origin: Una sequenza OPZIONALE di caratteri contenente la serializzazione ASCII di un'origine ([RFC6454], Sezione 6.2) a cui il servizio alternativo è applicabile.
- Alt-Svc-Field-Value: Una sequenza di ottetti (lunghezza determinata sottraendo la lunghezza di tutti i campi precedenti dalla lunghezza del frame) contenente un valore identico al valore del campo Alt-Svc definito nella Sezione 3 (produzione ABNF "Alt-Svc").
Il frame ALTSVC non definisce alcun flag.
Il frame ALTSVC è destinato alla ricezione da parte dei client. Un dispositivo che agisce come server DEVE ignorarlo.
Un frame ALTSVC sul flusso 0 con informazioni "Origin" vuote (lunghezza 0) non è valido e DEVE essere ignorato. Un frame ALTSVC su un flusso diverso dal flusso 0 contenente informazioni "Origin" non vuote non è valido e DEVE essere ignorato.
Il frame ALTSVC viene elaborato hop-by-hop. Un intermediario NON DEVE inoltrare i frame ALTSVC, sebbene possa utilizzare le informazioni contenute nei frame ALTSVC per formare nuovi frame ALTSVC da inviare ai propri client.
La ricezione di un frame ALTSVC è semanticamente equivalente alla ricezione di un campo di intestazione Alt-Svc. Di conseguenza, il frame ALTSVC fa sì che i servizi alternativi vengano sostituiti per l'origine corrispondente. Si noti che non sarebbe saggio mescolare l'uso dei campi di intestazione Alt-Svc con l'uso dei frame ALTSVC, poiché la sequenza di ricezione potrebbe essere difficile da prevedere.