Эти значения не являются конкурирующими написаниями одного режима:

Connection: Upgrade
Connection: keep-alive, Upgrade

Второе перечисляет два параметра соединения. HTTP определяет Connection как список через запятую, причём имена параметров нечувствительны к регистру. Код, сравнивающий всё значение с точной строкой Upgrade, пропускает допустимый список, содержащий этот параметр.

При обычной пересылке HTTP-посредник разбирает входящее поле, удаляет поля, названные его параметрами, а затем удаляет сам Connection или заменяет его собственными управляющими параметрами для дальнейшего соединения.

Удаления только жёстко заданного поля Keep-Alive недостаточно. Сообщение может назвать в списке другое поле, специфичное для соединения, и это поле не должно попасть в обычную пересылку.

Поддержка обновления протокола требует осознанной обработки двух соединений и нового протокола. Слепое копирование входящих заголовков Upgrade не является реализацией такой передачи.

Когда один браузер работает, а другой нет, сравните фактические значения поля по обе стороны посредника. Разница между одним токеном и списком из двух токенов может выявить ошибку разбора, не требуя от браузера имитировать точное форматирование другого браузера.

Это касается HTTP-сообщений, которые разбирает прокси. Обычный туннель HTTPS CONNECT не раскрывает этому прокси поле Connection зашифрованного сайта.

Похожие статьи