【问题标题】:WebSocket connection fails on Chrome without SSL没有 SSL 的 Chrome 上的 WebSocket 连接失败
【发布时间】:2018-11-15 04:58:59
【问题描述】:

我正在标准网页和 Tomcat v7.0.62 服务器之间设置 WebSocket。在 Firefox、Edge 和 IE11 上打开/关闭 Tomcat SSL 时,连接工作正常。但是,在 Chrome (v66.03) 中,只有当我在服务器上打开 SSL 并通过 https 连接时,websocket 才会连接。在 Chrome 中,当我在服务器上关闭 SSL 并尝试通过 http 连接时,它会引发错误。

这是 Chrome 在 Tomcat 上关闭 SSL 的情况下尝试通过 http 连接时抛出的错误...

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 连接上使用特殊代码吗?

【问题讨论】:

  • 能否请你把你的服务器配置和代码,也把完整的客户端代码?
  • 旁注:考虑ver wss = "ws" + document.location.protocol.slice(4);

标签: ssl websocket tomcat7


【解决方案1】:

这是 Chrome 特有的行为。 Chrome 不允许不安全的 websocket (ws) 连接到 localhost(只有 wss,所以你应该为你的本地 web/websocket 服务器设置一个 TLS 证书)。但是在 Firefox 和其他浏览器中应该可以正常工作。

有关此问题,请参阅 Chromium 上的 Chrome 错误报告。这个特殊的问题是故意的,他们做了这个改变 通过防止对内部网络设备的攻击和在 localhost 上侦听的进程,Chrome 更加安全。

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

【讨论】:

    【解决方案2】:
    Error in connection establishment: net::ERR_PROXY_AUTH_REQUESTED_WITH_NO_CONNECTION
    

    看起来您可能在客户端和服务之间有一个带有身份验证的代理。根据代理和客户端配置,它可能会允许 SSL 连接,但纯 http 将被过滤。

    【讨论】:

      【解决方案3】:

      我无法确认您的问题。你可以在这里尝试回声测试:http://www.websocket.org/echo.html

      网站支持http和https,可以指定ws://echo.websocket.orgwss://echo.websocket.org。我已经尝试了所有组合,它们都对我有用。

      我的猜测是您的服务器的配置问题或浏览器扩展的问题。

      【讨论】:

      • 是的,就是这样。当我访问 echo.websocket.org 时,我没有遇到任何问题。我的客户使用相同版本的 Chrome,当他们转到 echo.websocket.org 时,会在建立连接时遇到错误
      • 好吧,然后告诉你的客户修复他们的浏览器,我猜。如果他们使用强制执行某些安全策略、阻止某些脚本或连接或将代码注入站点等的扩展程序,您将无能为力。
      • 我在 2 年后的今天做了你的测试,结果是:“无法构造 'WebSocket':可能无法从通过 HTTPS 加载的页面启动不安全的 WebSocket 连接。”
      • 我在我的网络浏览器中使用了这段代码,我在其中使用 2 个参数实例化了一个 WebSocket。第二个是协议:exampleSocket = new WebSocket("ws://"+ip+":"+port, "protocolOne"); 去掉第二个参数就可以了:exampleSocket = new WebSocket("ws://"+ip+":"+port);
      猜你喜欢
      • 1970-01-01
      • 2015-12-18
      • 2020-03-12
      • 2018-12-19
      • 1970-01-01
      • 2022-10-17
      • 2019-06-21
      • 2016-04-20
      相关资源
      最近更新 更多