Розбір заголовків Connection у HTTP як списку токенів через кому
Розбирайте кожен параметр Connection без урахування регістру, коли прямий проксі зустрічає keep-alive і Upgrade в одному полі HTTP/1.1.
Ці значення не є конкуруючими написаннями одного режиму:
Connection: Upgrade
Connection: keep-alive, Upgrade
Друге перелічує два параметри з'єднання. HTTP визначає Connection як список через кому, причому назви параметрів нечутливі до регістру. Код, що порівнює все значення з точним рядком Upgrade, пропускає припустимий список, який містить цей параметр.
Для звичайного пересилання HTTP-посередник розбирає вхідне поле, видаляє поля, названі його параметрами, а потім видаляє сам Connection або замінює його власними керівними параметрами для подальшого з'єднання.
Видалення лише жорстко заданого поля Keep-Alive недостатньо. Повідомлення може назвати в списку інше поле, специфічне для з'єднання, і це поле не повинно потрапити у звичайне пересилання.
Підтримка оновлення протоколу потребує усвідомленої обробки обох з'єднань і нового протоколу. Сліпе копіювання вхідних заголовків Upgrade не є реалізацією такої передачі.
Коли один браузер працює, а інший ні, порівняйте фактичні значення поля з обох боків посередника. Різниця між одним токеном і списком із двох токенів може виявити помилку розбору, не вимагаючи від браузера імітувати точне форматування іншого браузера.
Це стосується HTTP-повідомлень, які розбирає проксі. Звичайний тунель HTTPS CONNECT не розкриває цьому проксі поле Connection зашифрованого сайту.