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

时间:2014-12-06 01:26:24

标签: javascript websocket handshake

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

我的服务器返回HTTP 400以指示websocket升级失败。

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

 WebSocket连接到' wss://'失败: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"}

1 个答案:

答案 0 :(得分:4)

我担心Javascript无法知道协商的HTTP状态代码。

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