1. 前言
在近期项目的 WebSocket 服务开发过程中,总结了一些关键技术要点。
其中最重要的一点:WebSocket无鉴权机制。
2. 请求无法携带Header
前端反馈,由于浏览器安全策略限制,在发起 WebSocket 连接时,无法通过 JavaScript 代码设置自定义 HTTP Header(如 Authorization)。
3. 握手失败的异常响应
项目在 WebSocket 握手阶段会对 URL 参数中的 token
进行校验。如校验失败,后端会终止握手连接,并尝试返回自定义的异常响应。
然而,前端反馈无法捕获该自定义异常,其 WebSocket 客户端仅能接收到 1006
状态码(连接异常关闭)。
经查阅发现,这是由 WebSocket 的前端实现限制所致:客户端在握手阶段失败时,无法正确解析服务端返回的具体响应信息(包括自定义异常),统一仅返回 1006
状态码。