Firefox, сочетающий в себе соединение: keep-alive, Upgrade, конфликтует с прокси мобильного оператора - PullRequest
0 голосов
/ 05 мая 2018

У меня на сервере работает WebSocketServer, и веб-сайт пытается подключиться к нему и отправлять туда и обратно информацию.

Я заметил, что в WiFi он отлично работает во всех протестированных мною браузерах, но через Mobile Data Firefox. Я перехватил и отредактировал заголовки и сумел воспроизвести проблему. Firefox отправляет комбинированный заголовок Connection: keep-alive, Upgrade в запросе. Chrome в сравнении просто отправляет Connection: Upgrade. Моя теория состоит в том, что, когда запрос проходит через прокси-сервер поставщика мобильных данных, а также добавляет свои собственные идентифицирующие заголовки, он повторно анализирует все другие заголовки и не понимает объединенный заголовок. Это подтверждается тем фактом, что на стороне сервера запрос получен (от Firefox), но заголовок Connection урезан до Connection: keep-alive. Если я вручную удалю keep-alive из заголовка Connection с помощью программы перехвата, проблема будет решена.

Мне не нужна часть keep-alive запроса (на самом деле, если бы я предпочел, чтобы он не был включен), поэтому я спрашиваю, есть ли способ остановить отправку Firefox без использования about: config и т. д. (например, в JS или HTML), поскольку я хотел бы, чтобы это работало для общего конечного пользователя.

Большое спасибо,
Ричард

1 Ответ

0 голосов
/ 28 января 2019

У меня была похожая проблема, отныне решенная.

В моем случае проблема заключалась в том, что у моего хостинг-провайдера был прокси, который неправильно обрабатывал заголовки Connection и / или Upgrade. Действительно, эти заголовки скачкообразный и как таковые:

Заголовки для прыжков имеют смысл только для одного соединения транспортного уровня, и не должны повторно передаваться прокси или кэшироваться. Такими заголовками являются: Соединение, Keep-Alive, Proxy-Authenticate, Proxy-Authorization, TE, Trailer, Transfer-Encoding и Upgrade. Обратите внимание, что только общие заголовки могут быть установлены с использованием общего заголовка соединения.

Соус: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers

Вскоре эти заголовки не передаются повторно, а как-то интерпретируются перед передачей на ваш сервер. Когда эти заголовки отправляются Firefox, эта фаза интерпретации становится критической, поскольку значение, связанное с заголовком Connection, является более «сложным», чем значение, отправляемое другими браузерами, т.е.

Firefox отправляет Connection: keep-alive, Upgrade

Chrome / Edge / ... отправляет Connection: Upgrade


Решение : Я просто сказал своему хостинг-провайдеру, что на мой сервер приходит только Connection: keep alive при отправке Upgrade: <my_protocole> И Connection: keep alive, Upgrade (и у него была возможность исправить выдача в течение 72 часов) .
...