【问题标题】:Websocket handshake failing in Webkit with Socket.io 0.7使用 Socket.io 0.7 的 Webkit 中的 Websocket 握手失败
【发布时间】:2011-09-28 10:01:03
【问题描述】:

我已升级我的 node.js 应用程序以使用最新的 socket.io 模块。但是,现在只有 Firefox 可以连接,Chrome 和 Safari 报此错误:WebSocket 握手期间出错:'Connection' header value is not 'Upgrade'

【问题讨论】:

  • Chrome / Safari 的哪个版本。也可以尝试在#socket.io 中抱怨
  • 谷歌浏览器 12.0.742.112 / Safari 5.0.5 (6533.21.1)
  • 我也遇到这个问题,在dotcloud上使用node 0.4.5和socket.io 0.7.6。
  • 临时解决方案是禁用本机 websockets 并改用 xhr-polling。我在#socket.io 中问过,似乎没有人知道这是怎么回事,这不是一个常见的问题。即使使用 hello world 示例应用程序,我也遇到了问题。
  • 我在 Heroku 上遇到了同样的问题,但他们使用的是 Nginx 并声明他们只支持 HTTP 1.0 (devcenter.heroku.com/articles/http-routing)

标签: node.js webkit websocket socket.io


【解决方案1】:

检查您的 Nginx 版本。 v1.4 似乎工作正常,而我在 v1.2 上遇到了问题(必须升级)。

【讨论】:

  • 仅供参考,如果在 Ubuntu 上升级到 1.4,这是您需要的资源:@​​987654321@
【解决方案2】:

是的,它完全是 nginx - 我让一切正常,改变了一些不必要的东西,然后它就不起作用了。只有在阅读完这篇文章后,我才意识到我已经停止在 URL 中输入端口,因此属于 nginx 的代理。添加端口,立即工作。

【讨论】:

    【解决方案3】:

    Nginx 与 HTTP 1.1 不兼容(开箱即用),而 HTTP 1.1 是 WebSocket 所必需的。你需要修补它(我帮不了你,太麻烦了)或者你可以只使用 node.js 堆栈。

    我使用node-http-proxy

    另见:Advantages of a reverse proxy in front of Node.JS

    【讨论】:

    • Nginx 的开发版本支持 HTTP 1.1,所以这是另一种选择。 :)
    猜你喜欢
    • 2015-01-15
    • 2014-01-04
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 2011-04-07
    • 2023-03-05
    相关资源
    最近更新 更多