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.

Artigos relacionados