Analisar cabeçalhos Connection do HTTP como tokens separados por vírgula
Analise cada opção de Connection sem diferenciar maiúsculas de minúsculas quando um proxy de encaminhamento encontra keep-alive e Upgrade no mesmo campo HTTP/1.1.
Estes valores não são grafias concorrentes de um único modo:
Connection: Upgrade
Connection: keep-alive, Upgrade
O segundo lista duas opções de conexão. O HTTP define Connection como uma lista separada por vírgulas, com nomes de opções sem distinção entre maiúsculas e minúsculas. Código que compara o valor inteiro com a string exata Upgrade perde uma lista válida que contenha essa opção.
No encaminhamento comum, um intermediário HTTP analisa o campo recebido, remove os campos nomeados pelas suas opções e depois remove o próprio Connection ou substitui-o pelas suas próprias opções de controlo para a conexão seguinte.
Remover apenas um campo Keep-Alive codificado de forma fixa não é suficiente. Uma mensagem pode nomear outro campo específico da conexão na lista, e esse campo não pode passar para o encaminhamento comum.
Suportar uma atualização de protocolo exige tratar deliberadamente as duas conexões e o novo protocolo. Copiar cegamente os cabeçalhos Upgrade recebidos não é uma implementação dessa passagem.
Quando um navegador funciona e outro falha, compare os valores reais do campo nos dois lados do intermediário. A diferença entre um token e uma lista de dois tokens pode revelar um erro do analisador sem exigir que o navegador imite a formatação exata de outro.
Isto diz respeito a mensagens HTTP que o proxy analisa. Um túnel HTTPS CONNECT comum não expõe a esse proxy o campo Connection do site encriptado.