Analizzare le intestazioni HTTP Connection come token separati da virgole
Analizza ogni opzione Connection senza distinzione tra maiuscole e minuscole quando un proxy in avanti incontra keep-alive e Upgrade nello stesso campo HTTP/1.1.
Questi valori non sono grafie concorrenti di un unico modo:
Connection: Upgrade
Connection: keep-alive, UpgradeIl 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.