WebSocket connection to 'ws://xxxxxx/ws/' failed: Unexpected response code: 502

在使用reactJs开发一个项目的时候在适配Android的时候遇到这个问题。

首先,前提是这个webscoket地址是可以使用的,并且在电脑浏览器上是可以正常的

其次,Android7.0以上的原生浏览器上是正常的(国内其他机型自带浏览器不包括,因为基本都是自己的内核)

通过错误可以知道,服务器是连上了,但是发生了错误,又部分机型可能提示的是  握手失败

错误查找是通过抓包对比请求头发现的。

Android原生浏览器上多了一个  Sec-WebSocket-Protocol: undefined

而浏览器的请求头里没有这一行

解决方式:

我使用的是 react的Sockette库,所以是在配置里加了下边红色那行,也就是协议方式

protocols: "chat",

timeout: 10e3,

maxAttempts: 10,

发送请求的时候头部里显示

Sec-WebSocket-Protocol: chat

这时候显示请求成功。

如果使用的是  WebSocket,

那么代码方式是 

var ws = new WebSocket("ws://xxxxx/ws/","chat")

这里只是我的错误方式和解决方案,对socket没有过深入研究,只停留在使用阶段,可能还有别的错误方式,暂时没时间继续跟进,之前以为是兼容性问题,耽误了很久的项目工期。

最后兼容到Android4.4+原生浏览器,因为Android4.4以下的webview并不支持websocket

参考:微信小程序WebSocket报错:Error during WebSocket handshake: Sent non-empty 'Sec-WebSocket-Protocol' header but no response was received

 

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值