Javascript Firefox合并';连接:保持活动状态,升级';与移动运营商代理冲突

Javascript Firefox合并';连接:保持活动状态,升级';与移动运营商代理冲突,javascript,websocket,http-headers,keep-alive,Javascript,Websocket,Http Headers,Keep Alive,我有一个WebSocketServer在服务器盒上运行,一个网站试图连接到它并来回发送信息 我注意到,在WiFi上,它在我测试过的所有浏览器上都能完美地工作,但是在移动数据Firefox上。我截取并编辑了标题,并设法重现了这个问题。Firefox正在请求中发送一个组合头连接:保持活动,升级。相比之下,Chrome只是发送连接:升级。我的理论是,当请求通过移动数据提供商的代理并添加自己的标识头时,它会重新解析所有其他头,而不理解组合头。服务器端接收到请求(来自Firefox),但连接头被截断为连接

我有一个WebSocketServer在服务器盒上运行,一个网站试图连接到它并来回发送信息

我注意到,在WiFi上,它在我测试过的所有浏览器上都能完美地工作,但是在移动数据Firefox上。我截取并编辑了标题,并设法重现了这个问题。Firefox正在请求中发送一个组合头
连接:保持活动,升级
。相比之下,Chrome只是发送
连接:升级
。我的理论是,当请求通过移动数据提供商的代理并添加自己的标识头时,它会重新解析所有其他头,而不理解组合头。服务器端接收到请求(来自Firefox),但
连接
头被截断为
连接:保持活动
,这一事实证实了这一点。如果我使用拦截程序从
连接
头中手动删除
保持活动
,问题就解决了

我不需要请求的
keep alive
部分(事实上,如果我希望它不被启用的话),所以我想问是否有一种方法可以阻止Firefox在不使用about:config等(例如JS或HTML)的情况下发送它,因为我希望它能为一般的最终用户工作

非常感谢,

理查德

我有一个类似的问题,从此解决了

在我的例子中,问题是我的主机提供商有一个代理,它没有正确处理
连接
和/或
升级
头。事实上,这些标题本身就是:

逐跳标题 仅对单个传输级别的连接有意义,并且不能由代理重新传输或缓存。这些头包括:连接、保持活动、代理身份验证、代理授权、TE、拖车、传输编码和升级。请注意,只能使用Connection general标头设置逐跳标头

来源:

很快,这些头不会被重新传输,而是在传递到服务器之前以某种方式进行解释。当Firefox发送这些标题时,这一阶段的解释变得至关重要,因为与
连接
标题相关的值比其他浏览器发送的值更“复杂”,即

Firefox发送连接:保持活动状态,升级

铬/边/。。。发送连接:升级



解决方案:我只是告诉我的主机提供商,只有当一个人发送
升级:
连接:保持活动,升级
(他有可能在72小时内纠正问题)时,我的服务器才会收到
连接:保持活动。你最后做了什么?不幸的是我从来没有找到解决这个问题的办法。对我来说,WebSocket的好处不如系统为每个人工作的能力重要,因此我最终求助于提出许多AJAX请求。对不起,我帮不上什么忙了…谢谢你的反馈。我从一个月前就开始调查了,继续调查,我可能离找到答案不远了。我会随时通知你的。