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