特定客户端SockJs Websocket请求丢失Upgrade等请求头原因排查
特定客户端机器缺失WebSocket请求头的可能原因
代理服务器的拦截转换
不少企业级代理(比如老旧的HTTP代理、内部反向代理)对WebSocket协议支持不佳,会直接把WebSocket升级请求转换成普通HTTP请求,自动丢弃Upgrade: websocket和Connection: upgrade这两个头。尤其是那种强制统一HTTP请求格式的代理,大概率会做这种处理。本地安全软件的限制
杀毒软件、第三方防火墙甚至系统自带的安全工具,可能带有Web协议过滤规则。为了“拦截可疑协议”,它们会直接修改请求头,删掉WebSocket升级所需的这两个字段,阻止连接从HTTP升级到WebSocket。浏览器或系统的网络配置异常
该机器的浏览器可能被设置成强制使用HTTP/1.0协议(WebSocket依赖HTTP/1.1及以上的升级机制),或者浏览器代理设置被篡改,导致请求发送时自动移除升级头。另外,系统组策略如果限制了WebSocket相关协议,也会引发这个问题。SockJS的 fallback 机制触发
SockJS本身会自动降级:如果检测到当前网络不支持WebSocket,会切换到HTTP长轮询等 fallback 模式。这种情况下发送的请求本来就不会携带Upgrade和Connection头,你可以检查该机器的请求是否属于SockJS的 fallback 请求类型。局域网设备的协议过滤
客户端所在局域网的网关、路由器等设备,如果开启了协议过滤功能,可能会识别出WebSocket升级请求并修改请求头,阻止协议升级,进而移除这两个关键头。
内容的提问来源于stack exchange,提问作者Aki T
相关产品推荐
相关产品推荐

