Estos valores no son grafías en competencia de un solo modo:

Connection: Upgrade
Connection: keep-alive, Upgrade

El segundo enumera dos opciones de conexión. HTTP define Connection como una lista separada por comas, con nombres de opción que no distinguen mayúsculas y minúsculas. El código que compara todo el valor con la cadena exacta Upgrade se pierde una lista válida que contenga esa opción.

Para el reenvío ordinario, un intermediario HTTP analiza el campo entrante, elimina los campos que nombran sus opciones y luego elimina el propio Connection o lo sustituye por las opciones de control del intermediario para la conexión siguiente.

Eliminar solo un campo Keep-Alive codificado de forma fija no basta. Un mensaje puede nombrar otro campo específico de la conexión en la lista, y ese campo no debe filtrarse al reenvío ordinario.

Admitir una actualización de protocolo exige tratar de forma deliberada las dos conexiones y el nuevo protocolo. Copiar a ciegas las cabeceras Upgrade entrantes no es una implementación de esa entrega.

Cuando un navegador funciona y otro falla, compara los valores reales de los campos a ambos lados del intermediario. Una diferencia entre un solo token y una lista de dos tokens puede revelar un error del analizador sin exigir que el navegador imite el formato exacto de otro navegador.

Esto afecta a los mensajes HTTP que analiza el proxy. Un túnel HTTPS CONNECT ordinario no expone al proxy el campo Connection del sitio web cifrado.

Artículos relacionados