浏览器中wss请求状态码101是成功了吗

是的,状态码 101 Switching Protocols 代表 WebSocket 连接成功

状态码 101 解释

在 WebSocket 连接过程中,客户端(浏览器)发送一个 HTTP Upgrade 请求,要求服务器将连接从 HTTP 协议升级到 WebSocket 协议ws://wss://)。

如果服务器 同意升级,就会返回:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade

这表示:

  • 服务器接受了 WebSocket 连接请求。
  • HTTP 连接已经成功升级为 WebSocket 连接。
  • 之后的通信将不再是 HTTP,而是 WebSocket 数据帧 传输。

如何确认 WebSocket 连接是否真正成功?

  1. 检查浏览器开发者工具

    • 在 Chrome 或 Firefox 中
      1. F12 打开 开发者工具(DevTools)。
      2. 进入 Network(网络) 标签。
      3. 选择 WS(WebSocket) 选项卡。
      4. 找到你的 wss:// 请求,查看状态码是否 101
      5. 点击该连接,在 Frames(帧) 选项卡中,查看 WebSocket 是否正常交换数据。
  2. 检查 WebSocket 状态
    在 JavaScript 控制台运行:

    console.log(socket.readyState);
    

    WebSocket 状态码解释:

    状态码 说明
    0 连接尚未建立
    1 连接成功,正在通信
    2 连接正在关闭
    3 连接已关闭或失败 ❌

    示例代码:

    let socket = new WebSocket("wss://your-server.com/path");
    socket.onopen = function() {
        console.log("WebSocket 连接成功!");
    };
    socket.onmessage = function(event) {
        console.log("收到消息:", event.data);
    };
    socket.onerror = function(error) {
        console.error("WebSocket 错误:", error);
    };
    socket.onclose = function() {
        console.log("WebSocket 连接已关闭");
    };
    

如果状态码 101 但连接仍然失败?

可能的原因:

  1. 后端 WebSocket 处理有问题

    • 服务器返回 101 但没有正确处理后续 WebSocket 数据。
    • 需要检查服务器端 WebSocket 代码。
  2. Nginx / 代理没有正确转发 WebSocket
    如果 WebSocket 是通过 Nginx 代理的,确保配置了正确的 proxy_set_header

    location /ws/ {
        proxy_pass http://127.0.0.1:8080/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
    }
    
  3. 防火墙或安全策略阻止 WebSocket

    • 确保服务器防火墙没有阻止 WebSocket 端口(通常是 4438080)。
    • 使用 wss:// 确保 WebSocket 连接是加密的,避免被浏览器阻止。

总结

状态码 解释
101 WebSocket 连接 成功升级
400+ 客户端请求错误 ❌
403 服务器拒绝 WebSocket 请求(权限问题) ❌
500+ 服务器错误 ❌

所以,如果 101 Switching Protocols,表示 WebSocket 连接已经建立,接下来可以通过 socket.onopensocket.onmessage 事件 确认是否能正常通信。

你可能感兴趣的:(运维,websocket)