在 Deno 中使用 websocket 报错 unexpected server response(401) 怎么办?

阅读时长 4 分钟读完

问题描述

在使用 Deno 进行 WebSocket 连接时,有时会出现 unexpected server response(401) 的错误提示。这个错误提示通常表示服务器拒绝了连接请求,通常是由于身份验证失败或者权限不足导致的。

解决方案

  1. 检查身份验证信息

当出现 unexpected server response(401) 错误时,首先要检查的是身份验证信息是否正确。如果连接的 WebSocket 服务器需要进行身份验证,那么需要确保提供了正确的身份验证信息。通常情况下,身份验证信息会以 HTTP 头的方式提供给服务器,例如:

这里的 <token> 就是身份验证令牌,需要根据实际情况进行替换。如果身份验证信息不正确,那么服务器就会返回 401 错误,提示身份验证失败。

  1. 检查 WebSocket URL

当身份验证信息正确无误,但是仍然出现 unexpected server response(401) 错误时,需要检查一下 WebSocket URL 是否正确。通常情况下,WebSocket URL 的格式为 ws://<hostname>:<port>/<path>,其中 <hostname> 是 WebSocket 服务器的主机名或 IP 地址,<port> 是端口号,<path> 是 WebSocket 服务器的路径。如果 URL 不正确,那么服务器就会返回 404 错误或者无法连接。

  1. 检查 WebSocket 服务器配置

如果身份验证信息和 WebSocket URL 都正确无误,但是仍然出现 unexpected server response(401) 错误时,需要检查一下 WebSocket 服务器的配置。通常情况下,WebSocket 服务器会有一些配置参数,例如身份验证方式、允许的源、允许的协议等等。如果这些配置参数设置不正确,那么服务器就会返回 401 错误。

  1. 检查 WebSocket 客户端代码

最后,如果以上三个方面都没有问题,那么就需要检查一下 WebSocket 客户端代码是否正确。通常情况下,WebSocket 客户端代码需要实现以下几个步骤:

  • 创建 WebSocket 对象
  • 监听 WebSocket 事件
  • 发送 WebSocket 消息

如果这些步骤中有任何一个出错,那么就有可能导致 unexpected server response(401) 错误。

示例代码

以下是一个使用 Deno 进行 WebSocket 连接的示例代码,其中包含了身份验证和错误处理的部分代码:

-- -------------------- ---- -------
----- -- - --- -------------------------------- -
  -------- -
    -------------- ------- ---------
  --
---

--------------------------- ------- -- -
  ---------------------- ------------
---

------------------------------ ------- -- -
  ---------------------- -------- ----------------
---

---------------------------- ------- -- -
  ---------------------- ---------
---

---------------------------- ------- -- -
  ---------------------- ------ -------------------
  -- ----------- --- ---- -
    --------------------------- ---------
  -
---
展开代码

在这个示例代码中,我们使用了 addEventListener 方法来监听 WebSocket 事件,包括连接成功、接收到消息、连接关闭和出现错误等。在出现错误时,我们通过判断错误代码是否为 401 来判断身份验证是否失败。如果身份验证失败,我们就可以进行相应的处理,例如重新获取身份验证令牌等。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d8fe95a941bf71340676ee

纠错
反馈

纠错反馈