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

2023-12-25

我想让一个 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 状态码。

有定义的关闭代码 https://www.rfc-editor.org/rfc/rfc6455#section-7.4.1,而1006仅意味着连接突然关闭,但协议甚至允许在不提供原因的情况下关闭连接。那,连同就绪状态 https://developer.mozilla.org/en-US/docs/Web/API/WebSocket#ConstantsAPI 是您诊断问题原因的唯一工具。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 在脚本中使用临时函数或过程

    我在用SQL Server 2012 我有一个脚本 通过它我可以将值插入到表中 在该脚本中我必须转换某些值的格式DateTime基于两个参数的变量 我可以使用CASE or if条件在sql 我不被允许做任何Function or proc
  • 如何在卡片操作中单击时调用特定回调 - Bot Framework

    我展示了一个带有一些产品的轮播 每个产品都有一个带有代码的按钮 卡片操作类型为 ImBack 但一旦通过 postAsync 方法显示轮播 单击按钮将再次调用根对话框 有没有办法定义按钮单击的回调或显示相同的轮播但使用 PromptDial
  • Windows Vista 中的安装文件名

    我在这篇文章中读到 http technet microsoft com en us library cc709628 aspx http technet microsoft com en us library cc709628 aspx
  • QTableView:当用户使用鼠标单击特定单元格时如何获取数据

    其实我是Qt新手 无法匹配QMouseEvent with QTableview 请帮助解决这个问题 下面是一个示例 说明如何在单击表格单元格时获取该单元格的文本 假设一个QTableView定义在一些MyClass班级 你需要connec
  • 如何使用 Bower 安装 Bootstrap v4 alpha? [复制]

    这个问题在这里已经有答案了 The v4 alpha 文档 http v4 alpha getbootstrap com getting started download states Bootstrap v4 0 0 alpha 可以通过
  • 如何运行将数据加载到其他项目 BigQuery Table 的云编辑器任务

    我在项目 A 下创建了云编辑器环境 我想将数据加载到其他项目 B BigQuery 表中 我知道任务 GCSToBigQueryOperator 但它没有成功 它失败了 我想知道如何实现这一点 我想从项目 A 运行一个将数据加载到项目 B
  • 滚动到 angular2 时动画进入视图

    我找到了一个库 用于在滚动到 aos https github com michalsnik aos 但它似乎没有任何 angular2 绑定可供使用 有谁知道如何在 Angular2 中完成类似的事情 或者至少配置 aos 在 Angul
  • 如何在iPhone中创建应用程序包?

    我使用 XCode 制作了一个小型应用程序 我如何创建一个应用程序包以将其安装在 iPhone 中 谁能帮我解决这个问题 提前致谢 是的 如上所述 您需要支付 99 美元的开发者费用 完成此操作后 您可以通过 XCode 直接部署到使用配置
  • PHP 中的数组打乱顺序

    我有以下代码 输出如下 域名 com image1 jpg 域名 com image2 jpg 域名 com image3 jpg 我正在尝试随机化输出的顺序 在 foreach 语句之前 我尝试使用 shuffle bb 对数组进行洗牌
  • 创建与 DetailView 相反的视图

    上传图像后 我试图从 CreateView 反转到 DetailView 我收到同样的消息 NoReverseMatch 位于 photo image add 未找到带有参数 和关键字参数 pk 50 的 image view 的反向操作
  • SailsJS Waterline 与 Bluebird Promises

    使用 Waterline ORM 时 如果我想使用默认提供的 bluebird Promise api 如何将处理传递回控制器 下面是代码 module exports Authenticate auth function req res
  • 如何衡量两个数据的相似度

    我正在测量两个大小相同的数据的相似度为20 即 A 0 915450999999999 0 908220499999997 0 900374999999996 0 890547499999996 0 880455499999997 0 86
  • 如何让 Firestore 索引合并发挥作用?

    我在使用 firestore 索引合并来减少所需索引的数量时遇到问题 考虑这个示例情况 Firestore 集合 测试 somedoc a 1 b 1 c 1 d 1 这将导致 Firestore 在测试时为字段 a 到 d 创建 4 个自
  • scala.js 与 jscala 有什么区别?

    有两个工具可以直接在 JavaScript 中编译 Scala 代码 Scala js http www scala js org and JScala https github com nau jscala 它们看起来都很棒 并且可以使用
  • issubclass 的用法

    gt gt gt import sys gt gt gt sys version info 2 4 4 final 0 gt gt gt class C pass gt gt gt issubclass C C True gt gt gt
  • 处理 Akka actor 中的错误

    我有一个非常简单的例子 我有一个演员 SimpleActor 通过向自身发送消息来执行周期性任务 该消息在参与者的构造函数中安排 在正常情况下 即没有故障 一切正常 但如果 Actor 必须处理错误怎么办 我还有另一个演员 SimpleAc
  • 捕获 C++ CLI 应用程序中登录的异常

    我试图捕获 C CLI 应用程序中的所有异常 以便我可以记录它们 包括堆栈跟踪 到目前为止 我有一些看起来很有希望的代码 STAThreadAttribute int main array
  • 使用 cffi-libffi 按值传递结构?

    我的印象是 CFFI 无法按值传递结构 但 CFFI 文档说 要将结构按值传递或返回给函数 请加载 cffi libffi 系统并将结构指定为 struct structure name 要传递或返回指针 您可以使用 pointer or
  • `--oom-kill-disable` 对 Docker 容器有什么作用?

    我已经明白了docker run m 256m memory swap 256m将限制容器 使其最多可以使用 256 MB 内存且无交换区 如果它分配更多 那么容器中的进程 不是 容器 将被杀死 例如 sudo docker run it
  • 在 Javascript 客户端中处理不成功的 websocket 升级请求

    我想让一个 javascript 客户端进程获取当客户端发出 websocket 升级请求并且该请求不成功时服务器返回的 HTTP 状态代码 我的服务器返回 HTTP 400 来指示 Websocket 升级不成功 我正在使用 Google