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

问题描述

我有一个How does a browser know if a site supports HTTP/2? 一样的问题。我想知道浏览器是如何知道网站支持 http3 的。

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

解决方法

HTTP 源可以使用“h3”ALPN 令牌通过 Alt-Svc HTTP 响应标头字段或 HTTP/2 ALTSVC 帧 (ALTSVC) 通告等效 HTTP/3 端点的可用性。

在这种情况下,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 上进行下一次连接。