Сбой подключения WebSocket в Chrome без SSL

я настраиваю WebSocket между стандартной веб-страницей и Tomcat v7.0.62 сервер. Соединение отлично работает с Tomcat SSL включен / выключен на Firefox, Edge и IE11. Однако в Chrome (v66.03), websocket подключается только тогда, когда я включил SSL на сервере и подключаюсь через https. В Chrome, когда я выключаю SSL на сервере и пытаюсь подключиться через http, он выдает ошибку.

вот ошибка Chrome бросает при попытке подключения через http с SSL выключен Кот...

Error in connection establishment: net::ERR_PROXY_AUTH_REQUESTED_WITH_NO_CONNECTION

вот мой код подключения WebSocket на клиенте...

var wss = "wss://";
if (document.location.protocol === "http:") {
   wss = "ws://";
}
var wsURL = wss + document.location.host + "/status?sessionId=<%=session.getId()%>";

Это что-то специфическое для Chrome, которое нуждается в специальном коде для соединений без https websocket?

3 ответов


это специфическое поведение Chrome. Chrome не разрешает незащищенные подключения websocket (ws) к localhost (только wss, поэтому вы должны настроить сертификат TLS для вашего локального веб-сервера/websocket). Но то же самое должно работать без каких-либо проблем в Firefox и других браузерах.

см. отчет хром ошибка на Chromium по этому вопросу. Эта конкретная проблема преднамеренна, и они сделали это изменение, чтобы сделать Chrome более безопасен, предотвращая атаки против внутренние сетевые устройства и процессы прослушивания на localhost.

https://bugs.chromium.org/p/chromium/issues/detail?id=378566


Я не могу подтвердить проблему. Вы можете попробовать Эхо-тест здесь:http://www.websocket.org/echo.html

веб-сайт поддерживает http и https, вы можете указать ws://echo.websocket.org и wss://echo.websocket.org. Я пробовал все комбинации, и все они работали для меня.

Я думаю, что это проблема конфигурации с вашим сервером или проблемы с расширениями браузера.


Error in connection establishment: net::ERR_PROXY_AUTH_REQUESTED_WITH_NO_CONNECTION

Кажется, у вас может быть прокси с аутентификацией посередине, между клиентами и службой. В зависимости от конфигурации прокси и клиентов он может пропускать SSL-соединения, но простой http будет фильтроваться.