1. Introduzione (Introduction)
L'Hypertext Transfer Protocol (HTTP) [RFC7230] fornisce una semantica a livello di risorsa compatibile tra diverse versioni, ma non offre compatibilità a livello di gestione della connessione. Altri protocolli che si basano sui dettagli di gestione della connessione di HTTP, come WebSockets, devono essere aggiornati per le nuove versioni di HTTP.
Il protocollo WebSocket [RFC6455] utilizza il meccanismo di aggiornamento HTTP/1.1 (Sezione 6.7 della [RFC7230]) per trasferire una connessione TCP da HTTP a una connessione WebSocket. È necessario adottare un approccio diverso con HTTP/2 [RFC7540]. A causa della sua natura multiplexing, HTTP/2 non consente campi di intestazione o codici di stato a livello di connessione, come i campi di intestazione della richiesta Upgrade e Connection o il codice di risposta 101 (Switching Protocols). Questi sono tutti richiesti dall'handshake di apertura [RFC6455].
Essere in grado di avviare WebSockets da HTTP/2 consente di condividere una connessione TCP da entrambi i protocolli ed estende l'uso più efficiente della rete di HTTP/2 ai WebSocket.
Questo documento estende il metodo HTTP CONNECT, come specificato per HTTP/2 nella Sezione 8.3 della [RFC7540]. L'estensione consente la sostituzione di un nuovo nome di protocollo a cui connettersi anziché l'host esterno normalmente utilizzato da CONNECT. Il risultato è un tunnel su un singolo flusso HTTP/2 che può trasportare dati per WebSocket (o qualsiasi altro protocollo). Gli altri flussi sulla connessione possono trasportare tunnel CONNECT più estesi, dati HTTP/2 tradizionali o una combinazione di entrambi.
Questo flusso tunnelizzato verrà multiplexato con altri flussi regolari sulla connessione e godrà delle normali funzionalità di priorità, cancellazione e controllo del flusso di HTTP/2.
I flussi che stabiliscono con successo una connessione WebSocket utilizzando un flusso tunnelizzato e le modifiche all'handshake di apertura definite in questo documento utilizzano quindi il protocollo WebSocket tradizionale, trattando il flusso come se fosse la connessione TCP indicata nella [RFC6455].