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

标签 javascript websocket handshake

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

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

我使用的是 Google Chrome,当我打开开发人员控制台时,我可以看到以下消息:

与“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"}

最佳答案

恐怕无法从 Javascript 知道协商的 HTTP 状态代码。

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

关于javascript - 在 Javascript 客户端中处理不成功的 websocket 升级请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27327266/

相关文章:

javascript - 使用 Angular 服务在 ng-view 页面之间共享数据

javascript - 使用不透明类型对 Typescript 记录进行索引

python - 如何以非阻塞的方式处理websocket数据?

authentication - 当 mqtt 客户端在 TLS 握手期间不提供公钥证书时,是否存在任何可以预期的安全问题?

python - 如果 SSL Labs 显示 "This server' 的证书链不完整,证书握手能否完成。等级上限为B。”?

protocols - Torrent 握手响应大于 68 字节

javascript - jQuery 文档准备好并按键调用一个函数

javascript - 如何根据另一个下拉菜单选择的条件删除和添加下拉列表值?

ios - 当 iOS 客户端发送 "unsubscribe"时,ActionCable 取消订阅回调不起作用

javascript - Nodejs、Express 和 WebSockets : Relaying a message to all clients other than the sender