shadrocket.com

线路观察

A记录没变,浏览器为什么仍可能连接不同端点:HTTPS记录、协议提示与回退怎么读

A和AAAA记录只提供地址候选。HTTPS服务记录还能发布替代端点、端口、协议集合与地址提示,浏览器会按自身能力尝试并在连接失败时回退。本文解释地址未变时,实际端点和HTTP版本为何仍可能变化。

两次查询同一域名,A记录都是同一个IPv4地址。第一次浏览器却通过HTTP/3连接,第二次改用HTTP/2,远端端口和地址族也可能不同。只看A记录,会得出“网络路径没有变化”的结论,但浏览器的候选信息并不只有A记录。

现代客户端还可能查询AAAA和HTTPS资源记录,读取替代服务名、协议集合、端口和地址提示。它会根据自身能力、缓存与连接结果选择候选。解析答案描述可选项,浏览器网络日志才描述某次请求真正采用了什么。

A与AAAA只提供地址候选

A记录把名称映射到IPv4地址,AAAA记录提供IPv6地址。一个答案可以包含多个地址,客户端还可能从不同缓存层取得结果。地址集合相同,不代表每次按相同顺序连接,也不代表应用使用同一地址族。

地址只回答“可以向哪里尝试”。它不写HTTP版本、替代端口或某个端点能否提供特定协议。服务器也可能在同一IP上承载多个虚拟主机,最终HTTPS身份仍由原始服务名和证书验证决定。

因此,排查记录若只有一个A答案,就缺少AAAA、TTL、解析器和查询时间。旧缓存与新权威答案也可能同时存在。应保留完整答案集,而不是只复制命令输出的第一行。

HTTPS记录为服务增加一层绑定信息

RFC 9460定义SVCB和HTTPS资源记录。它们不是传统网页内容,而是DNS中的服务发现资料。记录可以把服务指向另一个目标名,也可以为目标端点附带协议、端口和地址提示。

SvcPriority为0时属于AliasMode。它让某项服务指向另一个目标名,类似服务专用别名。原域名的A记录不变时,支持HTTPS记录的客户端仍可能解析别名目标并连接另一组地址。

非零优先级表示ServiceMode。此模式可直接描述一个或多个候选端点。较小数值代表服务方建议优先尝试;相同优先级的记录可以随机打散,用于负载分配。

这不是强制所有客户端使用第一个端点。客户端会过滤无法理解的必要参数,也会考虑协议支持和连接结果。旧客户端不认识HTTPS记录时,服务方通常仍保留A与AAAA作为兼容路径。

优先级不是延迟排名

SvcPriority表达服务方的推荐顺序,不是实时测速结果。优先级1的端点可能因本地网络阻挡而连接失败,优先级2则成功。最终采用较大数字,不表示DNS配置错误。

同一优先级内的随机顺序会让两次连接落到不同端点。若只比较最终IP,观察者可能误以为浏览器“不稳定”。实际情况可能是记录明确允许在同级候选之间分散请求。

端点是否可用还受地理解析、缓存与连接复用影响。已有连接可被继续使用,新标签页不必重新按DNS顺序建立。比较时要区分新连接与复用请求,否则会把连接池行为误写成解析变化。

ALPN参数描述端点提供哪些协议

HTTPS记录的alpn参数列出端点提供的协议套件,例如h2或h3。客户端把这些标识与自己支持的协议求交集,再决定能够尝试哪些传输。

“记录包含h3”只证明服务方声明端点提供HTTP/3,不证明这次浏览器已成功使用。浏览器版本可能不支持,企业策略可能关闭,网络也可能阻挡QUIC。实际协议要从连接日志或开发工具确认。

no-default-alpn会改变默认协议集合,mandatory则表示某些参数必须被客户端理解。若客户端不理解被标成必要的键,规范要求拒绝不兼容记录,而不是忽略后继续猜测。

这种兼容检查解释了为什么新旧设备得到同一DNS答案却选择不同路径。差异来自实现能力,而不一定来自服务器临时改动。记录中应保存客户端版本和支持状态。

port参数可以改变实际远端端口

ServiceMode可用port参数指定替代端口。原始网址仍是标准HTTPS形式,客户端却可能根据服务绑定尝试另一个端口。只检查443会漏掉该候选。

非默认端口也增加网络条件。防火墙、访客Wi-Fi或代理可能只允许常见端口,导致服务绑定端点不可达。RFC 9460提醒运营者谨慎使用可能被端口限制阻挡的配置。

替代端口失败时,客户端能否回到其他候选取决于记录和实现。排查时应写明失败端口、协议和后续动作,不能把“某端口失败”简化为“域名打不开”。

地址提示不是权威地址答案

ipv4hint与ipv6hint用于减少额外查询等待,让客户端可乐观地尝试地址。RFC 9460明确把它们称为提示,而不是替代A与AAAA的永久地址集合。

如果目标名的正式A或AAAA答案已经在本地可用,客户端应忽略提示。若先用提示建立连接,稍后取得正式答案,客户端也可以终止或切换连接。浏览器日志里出现短暂地址尝试,不一定表示最终请求走过该地址。

提示若长期与正式答案不一致,可能削弱地理负载分配或其他策略。分析时应分栏保存提示地址和正式地址,不能把两者合并后称为“DNS返回的全部IP”。

IPv4与IPv6候选之间还可能采用并行或交错尝试。最终地址族是一场连接竞争的结果。它不是域名永远偏好IPv4或IPv6的静态属性。

替代端点不会改变原始HTTPS身份

服务绑定可以指向另一个目标名,但RFC 9460规定它不会改变原始服务的验证权威。TLS客户端仍须针对用户访问的原始服务名验证证书。

这条边界很重要。浏览器连接某个CDN目标名或替代IP,不表示地址栏网站身份自动换成CDN域名。证书和HTTP权威规则继续约束替代端点能否代表原始来源。

证书验证成功也不是内容安全或服务可用保证。它证明握手中的身份匹配与信任条件成立。页面仍可能返回错误,应用也可能发生权限或后端故障。

HTTP/3广告与HTTP/3连接不是同一件事

RFC 9114定义HTTP/3运行在QUIC之上,并用h3作为应用层协议协商标识。HTTPS来源可以通过Alt-Svc等方式广告等价的HTTP/3端点,HTTPS记录也能更早提供协议信息。

浏览器收到广告后可以尝试QUIC。尝试成功并完成证书验证后,才可用该连接发送HTTP/3请求。广告、发起UDP报文、完成握手和发送请求是四个不同阶段。

Chromium项目的部署说明也把IETF QUIC与HTTP/3分层描述。QUIC承担传输并结合TLS 1.3,HTTP/3在其上承载HTTP语义。这与HTTP/2依赖TCP的连接栈不同。

开发工具若只显示最终h2,不能证明浏览器没有尝试h3。可能先尝试QUIC失败后回退。要判断过程,应查看连接事件或网络日志中的候选、错误和时序。

UDP受阻时页面仍可能成功

RFC 9114指出,UDP阻挡等问题会使QUIC连接无法建立,客户端此时应尝试基于TCP的HTTP版本。HTTP/3失败和网站整体失败因此不是同一结论。

一个网络可能允许TCP 443,却限制UDP。用户会看到页面最终打开,但首个请求比平时慢,因为客户端先等待QUIC失败再回退。另一个浏览器可能记住历史结果,直接使用TCP,表现又不同。

回退耗时没有统一固定值。浏览器实现、连接历史和操作系统计时器都会影响。不能看到多出一秒就断言那一定是QUIC超时,应从日志确认失败阶段。

反过来,HTTP/3成功也不保证更快。网络拥塞、服务器负载和对象大小仍会影响任务。协议名称应作为连接属性保存,不应直接改写成性能评价。

A记录不变时可能发生的四种变化

第一种是HTTPS AliasMode目标改变。原名称的A记录未动,支持新记录的客户端却转向目标名的地址。旧客户端仍走原A记录,两类设备同时存在。

第二种是ServiceMode优先级或参数改变。目标IP可能相同,端口或ALPN集合不同。连接因此从TCP上的h2转成UDP上的h3,或因不兼容回到旧路径。

第三种是正式地址未变,地址提示改变。浏览器可能短暂尝试新提示,随后使用A或AAAA答案。只看最终请求会漏掉额外尝试,只看提示又会误判实际连接。

第四种是DNS完全不变,网络条件变化。UDP临时受阻、IPv6路径不通或已有连接被复用,都可能改变最终协议。此时DNS不是变化来源,却仍参与候选生成。

用分层记录代替单一DNS截图

解析层保存查询时间、解析器、A、AAAA和HTTPS完整答案,以及各自TTL。HTTPS记录另列模式、优先级、目标名、alpn、port、mandatory与地址提示。

客户端层保存浏览器与系统版本、是否使用代理、网络类型和缓存状态。无需公开账号或精确IP;测量编号、接入网络类别和大致区域通常足够比较。

连接层记录实际远端地址、地址族、端口、HTTP协议、是否复用、QUIC或TCP握手结果。失败要保留阶段和错误类别,而不是只有“打不开”。

任务层记录页面首个文档、关键资源和真实操作是否完成。DNS和连接都成功,某个应用请求仍可能失败。只有把任务结果单列,才不会让底层成功掩盖上层问题。

比较时固定域名、时间窗和客户端条件。若需要验证缓存影响,可使用新的独立会话并标明做法。不要清除全部系统设置后又把结果与原记录混在一起。

来源核对记录:IETF《RFC 9460》,2023。IETF《RFC 9114》,2022。Chromium Blog《Chrome is deploying HTTP/3 and IETF QUIC》,2020。

A记录稳定,只能证明一类地址答案在所查时间没有变化。HTTPS记录、AAAA、协议参数、连接竞争和回退仍可改变实际端点。把候选答案与最终连接分开记录,才能解释浏览器为什么选择不同路径,也能避免把正常兼容机制误判成随机故障。

资料来源

  • Internet Engineering Task Force:《RFC 9460: SVCB and HTTPS Resource Records》,发布或更新于 2023-11-01
  • Internet Engineering Task Force:《RFC 9114: HTTP/3》,发布或更新于 2022-06-01
  • Chromium Blog:《Chrome is deploying HTTP/3 and IETF QUIC》,发布或更新于 2020-10-06