记录一次websocket数据发送失败的原因

  • Post author:
  • Post category:其他



websocket项目,在本地运行那是妥妥的没有问题,在当部署到客户的uat环境的时候,就出现了诡异的情况:本人vpn拨号,可以正常的访问,但是客户那边的电脑登陆到系统,只要有消息往前端jsp页面发送数据,后台就报错,错误信息:Broken pipe (Write failed)。


首先,用浏览器调试一下发现websocket的握手是正常的,然后就是网上各种找答案,发现其实大部分都是不是自己遇到的问题。最后没有办法,抓包分析呗,在抓包的过程中,发现当后端发送数据给前端页面的时候,会收到前端的带有RST+ACK的包(有可能不是前端发出的,可能是中间的某些设备直接返回的),这就有问题了,数据你都没有接收,居然给我发送RST标识的包?想起之前看到的一篇文章:https://www.cnblogs.com/syfwhu/p/5219826.html   里面有一句话:

很多现有的HTTP 中间设备可能不理解新的WebSocket 协议,而这可能导致各种问题:盲目的连接升级、意外缓冲WebSocket 帧、不明就里地修改内容、把WebSocket 流量误当作不完整的HTTP 通信,等等。这时WSS就提供了一种不错的解决方案,它建立一条端到端的安全通道,这个端到端的加密隧道对中间设备模糊了数据,因此中间设备就不能再感知到数据内容,也就无法再对请求做


特殊处理。再结合实际情况:本人的电脑可以正常访问,但是客户的就不行,唯一不同的就是电脑的环境了,然后就猜想客户那边电脑应该有个什么安全组啥的东东,经过了一系列的防火墙啊之类的设备,最后决定用wss来处理,改成用wss之后,一切正常。



版权声明:本文为zzqs432原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。