TCP 连接成功后代理 CONNECT 超时
找出 CONNECT 期间实际生效的超时,而不是假定 TCP 连接完成就意味着隧道建立也已完成。
客户端一旦连上代理,TCP 连接超时就已经完成了它的任务。接下来等待完整的 CONNECT 应答,可能由另一个定时器负责。
代理可能仍在连接上游、交换认证消息,或在等待另一项服务。网站的正常响应还没有开始。
| 最后完成的步骤 | 还在等待什么? |
|---|---|
| TCP 已连接到代理 | 代理握手,包括接受 CONNECT |
| CONNECT 已被接受 | 目标使用 TLS 时的目的地 TLS |
| 目的地请求已发送 | 目的地的响应 |
找出连接器读写该握手期间处于活动状态的定时器。名为 “response timeout” 的属性可能只在路由建立之后才生效。在 HttpClient 5 中,要区分 ConnectionConfig 及其套接字超时、TLS 握手配置,以及请求级的响应超时。请通过实际客户端所用的管理器来应用相应的连接配置。旧版 Apache HttpClient 使用不同的 API,因此旧代码片段并不是这些职责的可靠对照。
最终被 CONNECT 拒绝,仍应视为代理的应答。应答成功之后 TLS 卡住,属于另一个失败阶段。「TCP 已连接;在建立截止时间之前没有完整的 CONNECT 应答」比笼统地说代理超时更准确地描述了问题。
总体截止时间可以与这些阶段性限制一起约束调用方的等待。当它到期时,先通过客户端支持的生存期取消或关闭该操作,再让下一次尝试消耗连接容量。