测试站点http://socket.trailsandtribulations.net
firefox:v15 运行良好。 (但是,如果流量大且网速慢,Firefox 也会经常失败(安静地)。)
chrome:以前有效,但 v21 出现 WebSocket 握手期间出错:“Connection” header 值不是“Upgrade”
但是,如果chrome
在本地运行,它就可以正常工作!它破坏了我在泰国的客户端和在德国的服务器。再次强调,Firefox 始终都能正常工作,就像早期版本的 Chrome 一样。
使用 haproxy
通过 node.js
在 websocket 和通过 nginx
的 html 之间进行拆分
有什么变化导致此解决方案不起作用吗?
haproxy.cfg
现在显示测试站点链接 - 这样它始终是最新的。
最佳答案
从您的消息来看,该错误是由 Chrome 报告的,而最初我了解到该错误是由 Chrome 访问时服务器报告的。我认为作为一种解决方法,如果将“选项 httpclose”替换为“选项 http-server-close”,则可能会使问题消失。您还需要删除所有“选项forceclose”。如果只有“option http-server-close”,haproxy将不会触及响应路径中的Connection header ,这应该会让浏览器满意。但是,您必须记住,仍然存在显示错误的错误,应该将其报告给软件作者。
顺便说一句,你的超时时间太大了,最终你会出现许多死连接,这是没有意义的。如果您使用足够新的 haproxy,则可以使用“超时隧道”来设置 WS 超时,而不必处理较大的 HTTP 超时。但即便如此,1 天对于 TCP 连接来说还是太大了。您的一些用户将使用智能手机,其中 TCP 连接在切换发生前的存活时间不能超过几分钟。
关于google-chrome - 较新的 chrome 在使用 haproxy 服务器的 websocket 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12399225/