WebSocket 代理兼容性测试:握手、心跳与故障恢复

代理能够加载普通 HTTPS 页面,并不代表它能支持依赖 WebSocket 的浏览器工作流。升级请求可能被拒绝,认证可能只在首次连接有效,空闲隧道可能静默关闭,重连还可能改变地区和应用身份。

蓝晒风格全球互联网观测站让双向心跳流经过中央代理网关并展示受控重连路径

本指南用于测试自有或明确获准的 wss 端点,不能把页面打开成功误判为 WebSocket 兼容。不得对第三方实时系统发起未经许可的连接测试。

明确测试层次

RFC 6455 定义先执行 HTTP 开放握手,再传输双向消息帧;安全 WebSocket 还要先完成 TLS。代理路径可能在 DNS/路由、代理连接与认证、TLS 与证书、HTTP Upgrade、子协议、双向帧、心跳与空闲、关闭与重连等不同层次失败。

记录准确失败层,不要只写“WebSocket 失败”。这决定应修改代理路由、应用配置、证书信任还是服务端策略。

建立安全回显夹具

受控端点应在升级后返回连接别名,回显客户端序号与负载哈希,按计划发送服务端消息,支持已记录子协议,可暂停输出进行空闲测试,也能用指定关闭码执行故障测试。日志只保存脱敏时间和别名。

不得回显凭据、Cookie、完整请求头或私人负载。测试文本与二进制内容必须为合成数据。

固定测试矩阵

分别覆盖生产与下一浏览器版本、采购的 HTTP/HTTPS/SOCKS5 模式、关键地区、IPv4/IPv6/双栈、新路由/粘性路由/重连、小文本/中型二进制/分片消息、不同空闲时长,以及正常、短暂断网和代理拒绝。

比较路由时保持浏览器、端点和负载不变;比较浏览器版本时保持路由不变。

捕获开放握手

记录 DNS、代理连接、代理认证轮次、TLS、升级耗时、升级状态、选中子协议和扩展。有效成功必须同时满足目标正确、证书验证、返回 101,以及需要时选择正确子协议。普通 200 页面不是 WebSocket 成功;代理 HTML 响应也不能当作应用数据。

RFC 6455 要求连接无法打开或 TLS 验证失败时中止。不得关闭证书验证强行通过。

分开测试代理与源站认证

依次测试有效代理凭据与有效会话、无效代理凭据、有效代理但应用会话过期、代理认证后的连接复用,以及代理凭据轮换后的重连。错误代码和提示应稳定可预测。

凭据不得进入 WebSocket URL、控制台、截图或关闭原因。代理凭据轮换指南可验证安全替换。

验证双向消息帧

升级后按受控速率发送带序号的合成消息,确保客户端序号只确认一次、服务端序号按应用预期到达、哈希匹配、文本保持 UTF-8、二进制长度与哈希正确,并且关闭或被替换的连接不再接收帧。

TCP 保证字节顺序,但应用可能异步处理或重试,连接正常不等于业务恰好一次执行。

Playwright 可观察 WebSocket 打开、帧发送/接收与关闭,也可路由和模拟 WebSocket。模拟测试必须与真实代理路径测试分开,不能把本地模拟成功当作路由证据。

测量心跳与空闲存活

记录心跳间隔、最后双向消息时间、空闲时长、断线发现时间和关闭类别。分别测试低于、接近和超过疑似超时的时长,每种至少重复五次。稳定阈值关闭更像空闲策略;与负载相关的随机关闭可能来自容量或端点。

代理空闲超时与保活测试提供更完整方法。只有测量证明必要时才缩短心跳,否则会增加流量与连接压力。

测试有限重连

分别制造服务端关闭、短暂客户端断网和代理拒绝,验证应用能按期限发现断线,使用带抖动的指数退避,具备最大次数和总时长预算,明确排队消息是否重放,旧新连接不能重复提交事件,并能识别路由或地区变化。

代理重试风暴预防指南可避免大量连接同时重连。

验证会话与地区一致性

应用可能把 WebSocket 会话绑定到登录、Cookie、地区或后端分片。代理在重连时轮换后,即使 TCP/TLS 成功,逻辑会话也可能被拒绝。记录预期代理会话别名、出口地区和应用连接别名,并分别测试粘性与主动轮换。

住宅代理会话粘性测试可以区分稳定认证会话与“IP 永不变化”的错误假设。

有意测试 IPv4 与 IPv6

若同时提供两种地址族,记录代理跳点和受控端点看到的路径。分别测试强制 IPv4、强制 IPv6 和正常双栈选择。简单浏览器测试中的自动回退可能掩盖单一地址族故障。

统一故障分类

至少区分代理认证、代理连接、TLS 验证、升级拒绝、子协议、帧完整性、空闲关闭、重连超限、会话绑定和端点故障。只有重复出现且明确属于路由的证据才能触发隔离。代理池隔离与恢复指南提供可逆流程。

验收门槛

可根据业务设置升级成功率,但还必须满足:不开启证书绕过、子协议正确、帧无未知丢失或重复、p95 升级和消息往返在预算内、空闲行为已知、重连受次数/时间/字节限制、粘性与轮换符合产品定义,并且故障分类在重复样本中稳定。

阈值应来自业务需求,不能照抄最佳路由表现。

检查清单

  • [ ] 已记录端点所有权或测试许可。
  • [ ] 使用 wss 且保持证书验证。
  • [ ] 分开测试代理与源站认证。
  • [ ] 验证 101 与所需子协议。
  • [ ] 检查文本、二进制和服务端主动帧。
  • [ ] 负载为合成数据且日志已脱敏。
  • [ ] 已测量空闲阈值与心跳成本。
  • [ ] 已测试服务端关闭、断网和代理拒绝。
  • [ ] 重连有抖动和有限预算。
  • [ ] 已理解粘性与轮换会话。
  • [ ] 已测试可用的 IPv4 和 IPv6 路径。
  • [ ] 路由隔离需要重复的专属证据。

常见问题

HTTPS 页面成功是否证明支持 WebSocket?

不证明。代理还必须保留升级请求和应用需要的长期双向连接行为。

应测试 ws 还是 wss

生产类测试应使用包含 TLS 验证的 wssws 只能作为有限实验对照。

空闲连接断开一定是代理问题吗?

不一定,服务端、负载均衡器、浏览器、系统或网络都可能关闭它,必须通过受控路由重复验证。

可以记录所有消息帧吗?

只记录合成测试帧。生产帧可能含个人或机密数据,应优先记录序号、大小、哈希和时间。

合规说明

只对获准系统和代理资源执行 WebSocket 测试,遵守速率限制与条款,最小化负载和日志,保持 TLS 验证,不得用本方法绕过访问控制或检查第三方私人通信。