文章

网页聊天能打开却一直连接中?看懂 WebSocket 101 握手

网页首页和普通接口都能打开,但在线聊天、实时通知或协作页面一直显示“正在连接”,常见原因之一是 WebSocket 握手没有完成。此时测速正常也不足以证明链路完整,因为长连接还要经过一次协议升级。

101 状态码代表什么

WebSocket 通常从一个 HTTP 请求开始。客户端发送 Upgrade: websocket 和 Connection: Upgrade 等字段;服务器接受后返回 101 Switching Protocols。RFC 6455 明确说明,若状态不是 101,或 Sec-WebSocket-Accept 不符合预期,WebSocket 连接就没有建立。

因此“页面能加载”和“实时连接能建立”是两个验收点。前者只证明普通 HTTP 内容可达,后者还要检查升级请求、持续连接和中途关闭。

用浏览器开发者工具定位

  1. 打开出现问题的页面,再打开开发者工具的 Network 面板。
  2. 选择 WS 或 WebSocket 类型,刷新页面。
  3. 找到长时间 pending、失败或反复重连的请求。
  4. 查看握手状态、请求 URL、时间和关闭信息,但不要公开 Cookie、令牌或查询参数。
  5. 在同一浏览器中分别测试直连和一个机场节点,保持账号、页面和时间接近。

如果直连与代理都没有 101,先检查网站自身状态、登录权限或浏览器扩展。如果直连稳定返回 101,而某一节点持续得到 403、404、502 或超时,才有理由进一步检查该节点路径、分流规则或中间代理对升级连接的处理。

几种结果怎样判断

  • 101 后很快断开:握手成功,问题转向心跳、网络切换、空闲超时或服务端关闭码。
  • 403:可能涉及登录、Origin 或服务端访问策略,不能简单理解为机场被封。
  • 404:常见于请求路径或反向代理路由不对。
  • 502/504:说明网关无法及时从上游获得正常响应,需要结合网站自身状态判断。
  • 一直超时:再比较 DNS、TCP/TLS 建连和不同接入网络。

机场节点的验收方法

选择一个自己日常确实使用、且允许测试的实时应用,连续观察十到十五分钟。记录握手是否为 101、是否发生重连、切换节点后是否立即恢复,以及普通网页是否同时正常。不要用陌生的 WebSocket 测试站替代真实需求,也不要把一次服务端故障写成节点长期结论。

当同一应用在两个时段都能建立连接、保持在线,并且切换网络后能按预期重连,才算完成这项机场推荐验收。

参考资料

评论

搜索文章

正在加载搜索…