我有一个类似于 如何判断网站是否支持HTTP/2的问题。我想知道浏览器如何知道网站是否支持http3。
我正在使用 Safari 浏览器并启用了 http3 支持。然后我访问 https://cloudflare-quic.com
,协议是 h3-29
。我认为我的 Safari 使用 h3 协议探测此网站。它是如何知道的呢?
我有一个类似于 如何判断网站是否支持HTTP/2的问题。我想知道浏览器如何知道网站是否支持http3。
我正在使用 Safari 浏览器并启用了 http3 支持。然后我访问 https://cloudflare-quic.com
,协议是 h3-29
。我认为我的 Safari 使用 h3 协议探测此网站。它是如何知道的呢?
2023年的答案:
现在大多数浏览器都支持使用新的DNS记录类型HTTPS
,直接与HTTP/3连接,而无需在旧协议上进行初始连接。这比Alt-Svc
头部方法更好,因为它(根据规范):
在不等待完整的HTTP连接初始化(多次往返)之前,就能够享受到Alt-Svc的许多好处,并且不一定向网络路径上的所有实体透露用户的目标地址。
一个网站可以通过以下方式在DNS区域文件中宣传它支持HTTP/3:
example.com. 3600 IN HTTPS 1 . alpn="h3"
更多信息:
IETF草案规范:https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-svcb-https
CloudFlare博客上的文章: https://blog.cloudflare.com/speeding-up-https-and-http-3-negotiation-with-dns/
请注意,尽管主流浏览器支持,但HTTPS记录仍处于草案阶段,许多主机不允许在区域文件中放置HTTPS记录类型。您可能需要使用较大的DNS提供商,如Google Cloud DNS、AWS、Cloudflare等,或者使用自己的DNS服务器。
(0) > drill google.com HTTPS
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 25201
;; flags: qr rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;; google.com. IN HTTPS
;; ANSWER SECTION:
google.com. 544 IN HTTPS 1 . alpn=h2,h3
;; AUTHORITY SECTION:
;; ADDITIONAL SECTION:
;; Query time: 18 msec
;; SERVER: 8.8.8.8
;; WHEN: Thu Nov 2 11:33:02 2023
;; MSG SIZE rcvd: 53
它可以通过DNS中的HTTPS记录了解网站的功能,或者通过http/1.1或http/2连接(在TCP上)了解它。
我想它也可以尝试连接并查看是否连接成功。
浏览器似乎还会记忆先前访问过的一些站点。
从长远来看,我希望http/3成为默认选项,并且浏览器必须将旧版本视为要检测的异常情况,但那种情况可能是遥远的未来。