Web 浏览器如何使用 HTTPS 或 SVCB DNS 资源记录 (RR)?

Web 浏览器如何使用 HTTPS 或 SVCB DNS 资源记录 (RR)?

背景

IETF RFC 9460定义SVCBDNSHTTPS资源记录 (RR),可用于将连接升级到 HTTPS,还可指定支持的应用层协议 (ALPN)。

2021 年 9 月 7 日,Firefox 92 发布,增加了对 HTTPS RR 的支持

当有可用的 HTTPS RR 时,Firefox 会自动将 HTTP 请求升级到 HTTPS。它还将使用 HTTPS RR 中提供的信息来优化建立 HTTPS 连接的过程——这在概念上类似于使用 Alt-Svc 标头。(Firefox 错误 1721132)。

测试

尝试用 来测试这一点www.google.com

首先,我尝试查看它是否有HTTPSRR:

$ dig 8.8.8.8 www.google.com HTTPS

...

;; ANSWER SECTION:
www.google.com.     3358    IN  HTTPS   1 . alpn="h2,h3"

这里我们看到HTTPSRR 确实存在,并且我们注意到 HTTP/3 是参数h3值表示的受支持的协议alpn

接下来,尝试清除操作系统的 DNS 缓存。例如,在 Windows 上,我运行了ipconfig /flushdns。在地址栏上按下 Enter 之前也运行了此命令,因为在我测试的其中一个系统上,Firefox 和 Chrome(或其他进程)似乎经常尝试访问 google.com。

打开 Firefox v120 并尝试访问:www.google.com

问题

Firefox v120 虽然在 v92 版本中声明将使用 HTTPS RR 进行升级和优化,但似乎并没有要求这样做。

Wireshark 显示只查询A和RR:AAAA

wireshark

并且可以看到 Firefox 在切换到 HTTP/3 之前最初打开了 HTTP/2 连接,这是因为标Alt-Svc头的原因:

火狐

实际上,在多个网站上,似乎没有任何(Chrome、IceCat、Edge 等)桌面应用程序要求 RR,HTTPS因为当我在 WireShark 上筛选dns.qry.type == "HTTPS"dns.qry.type == 65时,我没有得到任何结果。只有当我明确通过进行查找时,我才会得到结果dig

问题

为什么看起来好像HTTPS从来没有查询过 RR?

为了尝试了解该问题,我还提出了以下可能有助于找到根本原因的引导性问题:

  • 这是默认禁用的功能吗?
  • 这是否取决于主机设置(除了设置 RR HTTPS)?我读过的任何资源都没有表明需要采取其他步骤。
  • 请求HTTPSRR 是谁的责任?是浏览器还是操作系统?到目前为止,我已经尝试使用 Guix System 1.4、Windows 10 和 Windows 11 的更新版本以及我上面提到的所有浏览器。
  • 这取决于硬件吗?

答案1

我认为这是一个与 Windows 相关的问题,因为 nslookup 不支持 HTTPS 查找,并且它在 win32 中内部使用。我认为浏览器依赖于 win32 函数。如果我在 iPhone 上的 Safari Chrome 或 Firefox 上测试它,它运行完美。

相关内容