WebSocket打开握手被取消

时间:2016-11-06 12:43:27

标签: node.js google-chrome wss

在Chrome中,我遇到了WebSocket连接问题:

  

wss://失败:WebSocket开放握手被取消

在其他浏览器中,一切运行良好。

我该怎么办?

2 个答案:

答案 0 :(得分:0)

我猜你正在尝试连接到localhost或其他非公共IP地址(192.168等)。由于安全性担心可能会从互联网上下载的网页拨打电话,Chrome会阻止这些请求。见https://news.ycombinator.com/item?id=9210484

其实我的初步诊断是错误的。我对通配符证书也有同样的问题。从letsencrypt向域发出特定证书解决了这个问题。

答案 1 :(得分:0)

不确定那是否是op的情况,但是如果您来这里是非常具体的组合:

  • 在反向代理中启用了可选的TLS客户端证书验证(例如Traefik中的verifyclientcertifGiven选项,或在其他一些反向代理中默认启用了)
  • 保护主机上的WebSocket终结点,该终结点无法通过浏览器访问(或者如果您仅在基于WebKit的Web视图中使用WSS终结点)
  • 在其他浏览器和客户端上一切正常的情况下,查看WebSocket opening handshake was canceled的结果

您可能会遇到Chromium(WebKit?)中一个长期存在的错误: https://bugs.chromium.org/p/chromium/issues/detail?id=329884

这个github问题和讨论(与报告的实际项目并不真正相关)https://github.com/beyondcode/laravel-websockets/issues/187也很好地解决了这个问题。

一种可能的解决方案是禁用可选的客户端证书验证,例如只是不使用它,或者将单个主机(要么需要不带客户端证书的主机)拆分为两个主机,一个不进行客户端证书验证,而另一个则强制执行。