JavaScript WebSocket连接失败:自定义头部导致连接失败的原因及解决方法

如何在 JS 中处理 WebSocket 连接失败的问题

问题:

使用 JavaScript WebSocket 连接到后端时,自定义 WebSocket 头部后连接失败,浏览器报错:“websocket connection to 'ws://localhost:8888/text' failed”。

分析:

观察网络请求发现,WebSocket 在连接服务器时发送了一条空消息,而服务端日志显示连接成功。

解决方案:

如果客户端在请求中携带了 Sec-WebSocket-Protocol 标头,服务端必须在响应中返回一个相同的 Sec-WebSocket-Protocol 标头。未返回该标头会导致客户端认为连接失败。

注意事项:

  1. 服务端未在 Java 客户端中使用子协议。
  2. 子协议类似于 HTTP 请求标头中的 Accept 和响应标头中的 Content-Type。