我后端使用spring boot写的websocket服务,前端用js写的WebSocket连接,我想自定义websocket的header头,于是就有了下面的代码:
let socket = new WebSocket('ws://localhost:8888/text',["accessKey","123124123","accessSecret","123123fawef"]);
然后我运行网页,浏览器报错:websocket connection to 'ws://localhost:8888/text' failed;
此时后端看TRACE日志,返回的是101,证明服务端是没有问题的。
于是我看了一下我的网页的网络请求,发现websocket在连接服务器的时候发送了一条空的信息,如下截图:
接下来是消息
然后我把后面的protocols的值去掉之后是可以正常连接的,而且消息里面并没任何东西
想请教一下各位,这种情况应该怎么处理。
这是服务端日志
明显是已经建立了session的。
你客户端既然在请求里携带了
Sec-WebSocket-Protocol
标头,那你服务端也要在响应里同样返回一个Sec-WebSocket-Protocol
啊。你服务端没返回,客户端当然认为是服务端不支持这些子协议,自然就认为连接失败了。P.S.1 你自己实现的 Java 客户端里压根也没有用到子协议啊……
P.S.2 从你传递的子协议的值来看,似乎你对子协议似乎有什么神奇的误解……可以看我之前的这篇回答(https://segmentfault.com/q/1010000022700936)。通俗(但并非完成正确)理解的话,对客户端来说约等于 HTTP 请求标头里的
Accept
,对服务端来说约等于 HTTP 响应标头里的Content-Type
。