浏览器如何知道站点是否支持 HTTP/3?

How does a browser know if a site supports HTTP/3?

我有一个和一样的问题。我想知道浏览器是怎么知道网站支持http3的。

我正在使用 Safari 并打开了 http3 支持。然后我去https://cloudflare-quic.com,协议是h3-29。我想我的 safari 使用 h3 协议探索这个网站。它是怎么知道的?

The spec defines 'Discovering an HTTP/3 Endpoint':

An HTTP origin can advertise the availability of an equivalent HTTP/3 endpoint via the Alt-Svc HTTP response header field or the HTTP/2 ALTSVC frame (ALTSVC), using the "h3" ALPN token.

在这种情况下,Alt-svc 存在:

$ curl -i https://cloudflare-quic.com
HTTP/2 200 
...
alt-svc: h3-27=":443"; ma=86400, h3-28=":443"; ma=86400, h3-29=":443"; ma=86400

因此,收到此响应的浏览器可以尝试在同一服务器上的 UDP 端口 443 上使用这三个草稿版本进行下一次连接。