Meteor:WebSocket 握手期间出错:意外响应代码:400

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

    如果 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')

【讨论】:

以上是关于Meteor:WebSocket 握手期间出错:意外响应代码:400的主要内容,如果未能解决你的问题,请参考以下文章

Django:WebSocket 握手期间出错:意外的响应代码:500

WebSocket 连接失败。 WebSocket握手期间出错-socketjs

“WebSocket 握手期间出错:状态行无效”

WebSocket 握手期间出错:意外的响应代码:302

websocket失败:WebSocket握手期间出错:意外响应代码:400

WebSocket 握手期间出错:意外的响应代码:500