【问题标题】:WebSocket opening handshake was canceledWebSocket 打开握手被取消
【发布时间】:2017-03-19 20:52:10
【问题描述】:

在 Chrome 中,我的 WebSocket 连接有问题:

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

在其他浏览器中一切正常。

我能做什么?

【问题讨论】:

标签: node.js google-chrome wss


【解决方案1】:

我猜你正在尝试连接到 localhost 或另一个非公共 IP 地址(192.168 等)。出于安全考虑,Chrome 会阻止这些请求,因为担心从互联网下载的页面可能会进行战争拨号。见https://news.ycombinator.com/item?id=9210484

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

【讨论】:

    【解决方案2】:

    不确定这是否是操作员的情况,但如果您来到这里并拥有以下非常具体的组合:

    • 在您的反向代理中启用了可选的 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 也很好地解决了这个问题。

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

    【讨论】:

      猜你喜欢
      • 2015-01-28
      • 2023-03-08
      • 1970-01-01
      • 2019-12-22
      • 2023-03-05
      • 1970-01-01
      • 2019-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多