WebSocket不是普通的短HTTP请求。客户端通常先通过HTTP或HTTPS代理建立连接,再发送带有 Upgrade: websocket 和 Connection: Upgrade 的握手,服务端返回 101 Switching Protocols 后才进入长连接。任何一层没有转发升级语义,都会出现“代理IP能访问网页,但WebSocket连不上”的现象。
先区分代理入口、CONNECT和Upgrade
在自有服务或已获授权的测试端点上,记录代理入口状态、CONNECT结果和目标服务日志。HTTPS代理常见顺序是:
- 客户端连接代理并完成认证。
- 客户端通过CONNECT请求目标主机和端口。
- 隧道建立后,客户端在隧道内发送TLS和WebSocket握手。
- 目标返回101,连接转为双向帧传输。
收到 407 仍是代理认证问题;CONNECT成功但没有101,则应检查目标端口、Upgrade头、反向代理配置和应用路由。不要把所有失败都归因于出口IP。
核对握手头和协议版本
WebSocket握手需要客户端生成有效的 Sec-WebSocket-Key,并带上正确的 Sec-WebSocket-Version。反向代理至少要确认Upgrade和Connection头没有被清除,Host、Origin和路径与应用路由一致。对自有网关,可在入口和上游分别记录头部名称、状态码和请求ID,敏感Cookie与Authorization只保留摘要。
如果服务端返回普通 200、301 或 403,说明请求没有完成WebSocket升级;如果返回 101 后马上断开,则进入连接保持、心跳、Origin策略或上游进程排查。
检查代理和反向代理的长连接能力
正向代理可能只支持普通HTTP请求,不支持长时间隧道;反向代理还可能设置较短的读写超时、连接数上限或缓冲策略。对自有设施,核对代理产品文档、入口网关的WebSocket转发开关、上游地址和超时设置。不要通过反复换节点或提高并发来“试出”一个可用出口,这会放大连接压力。
用短时受控握手做对照
准备一个只返回时间和连接状态的测试服务,固定路径与Origin,只改变一个变量:
- 直连与代理对照,确认问题是否在代理链。
- HTTP代理与SOCKS5代理对照,确认协议能力差异。
- IPv4与IPv6对照,排除地址族不可达。
- 短连接和带心跳连接对照,观察是否由空闲超时触发。
记录握手耗时、101状态、首个服务端帧、断开方向和关闭码。测试应限制连接数量和持续时间,并只使用自有或明确授权的服务。
连接建立后很快断开的常见原因
- 客户端或网关的空闲超时短于业务心跳周期。
- Origin或认证令牌只在握手阶段有效,后续会话被服务端关闭。
- 上游应用重启、容器滚动发布或连接数配额触发。
- 代理仅支持HTTP转发,不支持持续隧道或WebSocket帧。
心跳频率、重连次数和并发上限应由服务端契约决定;不要为了维持第三方连接而无限重连。
验收清单
- 代理认证、CONNECT、WebSocket Upgrade和101响应均有独立证据。
- 入口与上游头部、Origin、Host和请求路径可关联。
- 直连/代理、HTTP/SOCKS5、IPv4/IPv6对照结果可复现。
- 空闲超时、心跳、关闭码和上游重启情况已记录。
- 测试连接数量、持续时间和目标范围符合授权边界。
WebSocket故障的关键是确认“哪一层没有完成升级或保持连接”。按协议阶段拆开检查,比盲目更换代理IP更安全,也更容易让代理服务商或应用团队复现问题。






