Questi valori non sono grafie concorrenti di un unico modo:

Connection: Upgrade
Connection: keep-alive, Upgrade

Il secondo elenca due opzioni di connessione. HTTP definisce Connection come un elenco separato da virgole, con nomi delle opzioni che non distinguono maiuscole e minuscole. Il codice che confronta l'intero valore con la stringa esatta Upgrade perde un elenco valido che contiene quell'opzione.

Per l'inoltro ordinario, un intermediario HTTP analizza il campo in arrivo, rimuove i campi nominati dalle sue opzioni, poi rimuove Connection stesso o lo sostituisce con le proprie opzioni di controllo per la connessione successiva.

Rimuovere solo un campo Keep-Alive codificato a mano non basta. Un messaggio può nominare nell'elenco un altro campo specifico della connessione, e quel campo non deve trapelare nell'inoltro ordinario.

Supportare un aggiornamento di protocollo richiede una gestione deliberata delle due connessioni e del nuovo protocollo. Copiare ciecamente le intestazioni Upgrade in arrivo non è un'implementazione di quel passaggio.

Quando un browser funziona e un altro fallisce, confronta i valori reali dei campi su entrambi i lati dell'intermediario. Una differenza tra un singolo token e un elenco di due token può rivelare un errore del parser senza che il browser debba imitare la formattazione esatta di un altro browser.

Questo riguarda i messaggi HTTP che il proxy analizza. Un normale tunnel HTTPS CONNECT non espone al proxy il campo Connection del sito crittografato.

Articoli correlati