在 Javascript 客户端中处理不成功的 websocket 升级请求

Ben*_*ber 5 javascript websocket handshake

我想让一个 javascript 客户端进程获取当客户端发出 websocket 升级请求并且该请求不成功时服务器返回的 HTTP 状态代码。

我的服务器返回 HTTP 400 以表明 websocket 升级不成功。

我正在使用谷歌浏览器,当我打开开发者控制台时,我可以看到以下消息:

与“wss://”的 WebSocket 连接失败:WebSocket 握手期间出错:意外响应代码:400

但是,onerror 处理程序不包含此消息,它会收到 1006 错误,但并不表示由于获取 HTTP 400 而导致关闭。

JavaScript 开发人员如何处理握手错误?当客户收到握手错误时,我想向他们提供信息性消息。

我把 websocket 错误放在下面,它似乎没有包含任何我可以用来表明这个错误是 websocket 握手错误的结果。

 Websocket Error: {"path":{"length":0},"cancelBubble":false,"returnValue":true,"srcElement":{"binaryType":"blob","protocol":"","extensions":"","bufferedAmount":0,"readyState":3,"url":"wss://<my address>","URL":"wss://<my address>"},"defaultPrevented":false,"timeStamp":1417828938039,"cancelable":false,"bubbles":false,"eventPhase":2,"currentTarget":{"binaryType":"blob","protocol":"","extensions":"","bufferedAmount":0,"readyState":3,"url":"wss://<my address>","URL":"wss://<my address>"},"target":{"binaryType":"blob","protocol":"","extensions":"","bufferedAmount":0,"readyState":3,"url":"wss://<my address>","URL":"wss://<my address>"},"type":"error"}
Run Code Online (Sandbox Code Playgroud)

vto*_*ola 5

恐怕没有办法从 Javascript 中知道协商的 HTTP 状态码。

有定义的关闭代码,1006 只表示连接突然关闭,但协议甚至允许在不提供任何原因的情况下关闭连接。这与readyState API一起是您诊断问题原因的唯一工具。