Websockets 在 Chrome (wss) 中不工作:“握手被取消”

Posted

技术标签:

【中文标题】Websockets 在 Chrome (wss) 中不工作:“握手被取消”【英文标题】:Websockets not working in Chrome (wss): “handshake was canceled” 【发布时间】:2016-10-31 15:03:29 【问题描述】:

我目前正在 Docker Cloud 上开发 Websocket 应用程序。重新部署我的应用程序时,现在我总是收到此错误消息:

WebSocket 连接失败:WebSocket 打开握手被取消

查看数据框时,我看到一个包含此数据的帧:

(操作码-1)

在研究问题时,似乎与 SSL / 证书等有关。一些解决方案包括添加自签名证书。令人困惑的是,相同的证书似乎适用于 https 但不适用于 wss:

在使用其他浏览器进行测试时,我发现 Safari 运行良好。所以我确信服务器实际上是在正确的端口上使用正确的证书运行的。似乎只有 chrome 有问题。

我知道一些关于堆栈溢出的解决方案建议手动添加证书,但由于它适用于 Safari 并且它不是自签名证书,我认为它应该可以正常工作。

【问题讨论】:

【参考方案1】:

根据SSLabs 检查站点表明服务器没有提供证书链的所有需要​​部分,但错过了链证书:

此服务器的证书链不完整。等级上限为 B。 ... 连锁问题不完整 ... 2 额外下载 - Let's Encrypt Authority X3

通过正确配置服务器解决此问题后,它应该可以在所有浏览器中运行。目前它可能仅适用于某些浏览器,即如果浏览器缓存了访问其他站点时丢失的链证书(如 Firefox),或者它通过下载丢失的链证书 (Chrome) 来解决配置错误的服务器。

【讨论】:

以上是关于Websockets 在 Chrome (wss) 中不工作:“握手被取消”的主要内容,如果未能解决你的问题,请参考以下文章

在 HTTPS 页面上创建 websocket 对象时,如何阻止 chrome 将 websocket 从 WS 升级到 WSS

如何在 Play!Framework WebSockets ("wss://") 中使用 TLS

iis8 上 WSS 上的 Ratchet Websockets

是否可以使用带有所需端口的 http 方案,比如 6500,而不是 WebSockets 中的 ws 和 wss 方案?

Beyondcode\laravel-websockets 它正在重定向到 wss 而不是 localhost 上的 ws

网络错误 12152:Edge 和 IE 11 中的 WebSockets