curl 8.22 为 Happy Eyeballs v3 加入 25 毫秒解析延迟:代理团队应如何验证

curl 8.22.0 于 2026 年 9 月 2 日发布,其中一项网络变更被描述为“Happy Eyeballing v3:25 毫秒解析延迟”。对于使用代理执行合规数据采集、广告验证和市场研究的团队,这项变化值得单独测试,因为双栈连接调度会影响客户端连到哪个代理网关、何时启动另一地址族,以及哪些耗时会被归因于代理。

具有纸艺质感的全球互联网地图展示 IPv6 与 IPv4 路径经 DNS 竞速到代理网关和目标端

官方变更记录很简短。它并不意味着每个请求都会快 25 毫秒,也不是把连接超时或重试间隔统一改为 25 毫秒。解析延迟用于协调异步到达的地址族结果;连接尝试之间的节奏、完整连接超时和端到端请求耗时是不同指标。升级应被视为连接调度变化,而不是无条件的性能提升。

为什么需要解析延迟

双栈主机名可能同时返回 IPv6 与 IPv4 地址,但 A 与 AAAA 结果未必同时到达。企业 DNS、VPN、本地缓存、移动网络或云解析链路都可能让某一类结果更晚。如果客户端立刻使用第一批结果,可以快速启动连接,却也可能让另一地址族失去参与竞速的机会。

短暂的解析延迟会给另一类结果一个有界窗口,然后再安排连接。curl 8.22 记录的 25 毫秒属于这个解析阶段,不应与 CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS 混为一谈;后者控制地址可用后连接尝试之间的节奏。

为什么代理链路必须单独验证

使用代理时,客户端首先连接的通常是代理网关,而不是最终目标。传统 HTTP 代理和 CONNECT 隧道中,代理网关可能是双栈;目标域名则可能由客户端或代理解析,取决于协议与配置。不同 SOCKS 模式也会改变 DNS 责任方。

因此必须分别回答:

  • 客户端是否同时解析代理网关的 IPv4 和 IPv6?
  • 哪个网关地址最终胜出,升级前后是否一致?
  • 目标域名由代理解析,还是由客户端先转换为地址?
  • 首次连接之后,连接复用是否掩盖了新的调度逻辑?
  • IPv4 与 IPv6 网关是否对应不同区域、出口池或策略?

仅看到页面返回成功,无法证明这些边界都正确。

建立授权范围内的回归矩阵

仅使用获准的代理账号和测试目标。在自有 DNS 测试环境中准备 IPv4-only、IPv6-only 与双栈名称,并加入一个可控制 A 或 AAAA 响应延迟的双栈场景。

至少覆盖以下用例:

  1. 不使用代理的双栈目标,作为对照;
  2. 双栈代理网关,目标由代理解析;
  3. 双栈代理网关,目标由客户端解析;
  4. 仅 IPv4 与仅 IPv6 的代理网关对照;
  5. 每条路径分别测试冷连接和复用连接;
  6. 正常 DNS、延迟 A 响应、延迟 AAAA 响应。

保持客户端构建、解析器配置、网关区域、认证方式、请求内容和超时预算一致,在同一环境比较当前批准版本与 curl 8.22.0。

记录能够解释结果的数据

如果测试工具允许,记录 A 与 AAAA 查询开始和完成时间,并记录第一次连接尝试、后续地址族尝试、胜出的网关地址、连接完成、代理认证、CONNECT 完成、目标 TLS、首字节与总耗时。

每个样本还应包含:

  • curl 与运行时 libcurl 版本;
  • 代理协议及 DNS 责任方;
  • 网关主机名、区域与胜出地址族;
  • 冷连接或复用连接状态;
  • DNS 结果顺序和到达时间差;
  • 连接结果与 curl 错误码;
  • 响应验证、重试次数与字节数;
  • 按路径类型统计的 p50、p90 与 p95。

不要在日志中保留代理密码、Cookie、令牌或完整个人数据。使用合成标识,并在共享诊断文件前完成脱敏。

不要用猜测解释升级差异

如果 8.22 在某一 DNS 结果较晚时更早启动连接,应继续确认网关区域与策略仍然正确。中位数变快并不代表上线成功;若尾部失败、路径漂移或重试放大增加,业务结果仍可能变差。

如果 IPv4/IPv6 胜出比例变化,应分别比较两类路径的丢包、握手耗时与有效响应率。不要因为某个办公室或云区域里 IPv4 更常胜出,就直接关闭 IPv6。问题可能来自解析器、路由发布、防火墙或网关部署。

如果热连接看不到差异,可能只是连接复用避免了新的解析与建连。在受控样本中强制新连接再做判断,但不要为了展示基准差异而让生产请求频繁断开。

可以结合代理延迟归因测试把 DNS 与网关连接变化从目标处理耗时中分离,并使用IPv6 代理连接指南完成更全面的双栈排查。

设定上线门槛

测试前定义明确阈值,例如:

  • 有效请求失败率不得上升;
  • 强制代理场景不得出现直连;
  • 网关区域与出口策略保持稳定;
  • IPv4/IPv6 胜出比例变化可解释且有界;
  • p95 建连耗时改善或至少不恶化;
  • 每个有效结果的重试数不增加;
  • 单个有效业务动作的成本不明显上升。

如果客户端绕过代理、选择未授权路径、持续增加尾延迟或出现无法解释的地址族失败,应立即回滚。旧版本应保留到所有生产网络类型完成灰度。

升级检查清单

  • [ ] 已确认 curl 8.22.0 与实际加载的 libcurl 版本。
  • [ ] 已记录代理网关和目标域名的 DNS 责任方。
  • [ ] 已准备 IPv4-only、IPv6-only 与双栈对照。
  • [ ] 可在受控环境测量 A 与 AAAA 返回时间。
  • [ ] 冷连接与复用连接分开报告。
  • [ ] 已验证网关地址族、区域与出口策略。
  • [ ] 代理认证与 CONNECT 耗时单独统计。
  • [ ] p50、p90、p95 仅使用验证成功的响应计算。
  • [ ] 重试放大和有效结果成本保持在预算内。
  • [ ] 灰度回滚条件已提前批准。

常见问题

新的 25 毫秒就是 IPv4 回退超时吗?

不是。官方条目描述的是 Happy Eyeballs v3 的解析延迟。连接尝试节奏是另一个控制项,应分别测量 DNS 结果到达与套接字启动时间。

每个代理请求都会受到影响吗?

不一定。它主要影响正在连接的主机名为双栈、且地址族结果异步到达的场景。已经复用的代理连接可能不会重新解析和建连。

为了稳定是否应该强制 IPv4?

除非明确的网络要求如此,否则应先确定故障属于 DNS、路由、防火墙、网关部署还是客户端。强制单一地址族会掩盖 IPv6 缺陷并降低弹性。

更快的建连会不会选到不同代理出口?

部分部署中,不同地址族可能进入不同网关基础设施,因此必须记录网关地址、区域和实际出口策略。

内部来源说明:curl 项目《Changes in 8.22.0》,2026 年 9 月 2 日发布;条目“Happy Eyeballing v3: resolution delay of 25ms”。外部资料地址只保留在内部运营记录中。

代理基础设施只能用于合法且获得授权的活动。遵守目标站点条款、速率限制、隐私义务与数据保留要求,不得通过连接调优绕过访问控制或掩盖违规行为。