I have a kind of the same question as How does a browser know if a site supports HTTP/2?. I am wondering how the browser knows website support http3.
I am using safari and turned on the http3 support. Then I go to https://cloudflare-quic.com
and the protocol is h3-29
. I think my safari explores this website using h3 protocol. How does it know it?
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.
In this case, Alt-Svc
is present:
$ 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
So a browser receiving this response can attempt its next connection using those three draft versions on the same server, on UDP port 443.