背景
IETF RFC 9460定义SVCB
DNSHTTPS
资源记录 (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
。
首先,我尝试查看它是否有HTTPS
RR:
$ dig 8.8.8.8 www.google.com HTTPS
...
;; ANSWER SECTION:
www.google.com. 3358 IN HTTPS 1 . alpn="h2,h3"
这里我们看到HTTPS
RR 确实存在,并且我们注意到 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
并且可以看到 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
)?我读过的任何资源都没有表明需要采取其他步骤。 - 请求
HTTPS
RR 是谁的责任?是浏览器还是操作系统?到目前为止,我已经尝试使用 Guix System 1.4、Windows 10 和 Windows 11 的更新版本以及我上面提到的所有浏览器。 - 这取决于硬件吗?
答案1
我认为这是一个与 Windows 相关的问题,因为 nslookup 不支持 HTTPS 查找,并且它在 win32 中内部使用。我认为浏览器依赖于 win32 函数。如果我在 iPhone 上的 Safari Chrome 或 Firefox 上测试它,它运行完美。