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

本文介绍了一个WebSocket项目在特定环境下出现Broken Pipe错误的问题排查过程。通过抓包分析发现前端异常响应,并推测为中间设备干扰所致。最终采用WSS方案成功解决了该问题。

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之后,一切正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值