【问题标题】:Meteor: Error during WebSocket handshake: Unexpected response code: 400Meteor:WebSocket 握手期间出错:意外响应代码:400
【发布时间】:2015-06-04 13:13:12
【问题描述】:

错误Error during WebSocket handshake: Unexpected response code: 400的可能原因是什么?

该应用程序托管在 ubuntu 上,并使用 npm mup 包进行部署。我将捆绑的 ssl pem 文件包含在 mup.json 中。

还有什么我需要在服务器上配置的吗?

【问题讨论】:

    标签: node.js meteor websocket


    【解决方案1】:

    这可能是由以下三个原因之一引起的:

    1. 某些 ISP 可能使用不支持 websocket 的代理。这在 3G 网络上更为明显

    2. 如果您的应用已崩溃。 Meteor 尝试连接到服务器,但由于它不在线而无法连接。

    3. 如果 Nginx 未配置为使用 WebSocket,并且您的 MUP 实例位于 WebSocket 后面,也会发生这种情况。

    因此,如果您的应用程序按预期工作(可能只是需要很长时间才能连接)并且在开发控制台中出现此错误,则可能是由于代理服务器造成的。为避免这种情况,请尝试在您的服务器上安装 SSL (https://)。这样 ISP 或代理就无法更改您应用的连接。

    【讨论】:

    • 我会研究第 3 步。谢谢 Akshat。您是否知道是否有必要使用 aws 负载均衡器才能在实例上使用 ssl?我已经使用我的证书设置了负载均衡器,现在正在安装 nginx 并尝试为我的应用配置 .congif 文件
    • @meteorBuzz 是的,这就是原因。 AWS 负载均衡器不支持 websocket。我希望你提到这一点。您可能必须考虑禁用 websockets(环境变量 DISABLE_WEBSOCKETS=t)或使用其他负载均衡器,如 nginx。
    • 我已经移除了平衡器,并准备在实例上安装 nginx 并按照support.comodo.com/index.php?/Default/Knowledgebase/Article/… 安装我的 comodo 证书
    • 如果您将 ELB 更改为第 4 层 (TCP) 上的负载平衡,那么 websockets 将工作,但任何基于 HTTP 轮询的 websocket 仿真都可能失败。最好的办法是根据传入协议使用带有 IP 或 HTTP 路径散列的 HAProxy。 FWIW,Nginx 在其付费版本中也支持 IP 哈希,但价格相当昂贵。
    • @aembke 在 ELB TCP 负载平衡上你不能轻易使用 SSL。
    【解决方案2】:

    我通过酒店 WiFi 连接时遇到此错误。问题是您总是通过他们的代理连接到互联网。

    我的解决方案是将我的手机用作 Wifi 热点。我有 Android 6.0.1,您可以通过以下方式访问菜单:

    Settings > More > Tethering & portable hotspot > Set up Wi-Fi hotspot (and then enable 'Portable Wi-Fi hotspot')

    【讨论】:

      猜你喜欢
      • 2014-06-01
      • 2018-02-23
      • 2019-08-05
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 2021-04-09
      • 2017-12-13
      相关资源
      最近更新 更多