Okhttp实现的ws客户端,对接netty时,协议报错分析
我方使用Netty来接收ws请求。此时有报错,
报错信息:RSV != 0 and no extension negotiated, RSV:4。
报错分析
通过查询这个报错得知,主要原因是:“如果RSV不为0说明使用了WS扩展协议,allowExtensions如果设置为不允许扩展则报错”。
-
猜测是对方使用了扩展协议,对方说没有,但说是基于Okhttp实现的ws客户端。
我方使用org.java_websocket.client的ws客户端进行自测时候是没问题的,猜测两个客户端的版本(或者说是ws的协议版本)是不一样的,但是一般来说ws是标准协议,而且看他们的OKhttp和我们的java-websocket都是RFC6455(ws协议)。 -
我方netty使用的ws默认策略(不支持扩展协议)
-
对方发来请求头,是带有“默认扩展协议的”:
permessage-deflate是“数据压缩” -
创建请求时,设置不包含特定扩展的请求头(AI提示的)
-
实测okhttp 不允许设置这个头,客户侧解决办法是:设置最小压缩值,为最大,就不会对传输数据进行压缩。如下图:
参考链接
[1]: https://blog.youkuaiyun.com/nimasike/article/details/99230805