I am experimenting with enabling HTTP/3 support on my webserver. In my specific setup, it will not be possible to use UDP port 443, since I have different websites hosted by different webservers on the same public IP address, and I am not aware of any reverse proxy that supports TLS passthrough for HTTP/3.
I have enabled HTTP/3 on port 44113. The service is advertised using the HTTP header Alt-Svc: h3=":44113"; ma=2592000,h3-29=":44113"; ma=2592000
. Firefox successfully recognizes the service and makes any subsequent requests using HTTP/3. However, Chrome sticks with HTTP/2. When I temporarily moved HTTP/3 to port 443, it suddenly worked in Chrome as well.
Is this behaviour documented anywhere? Are there any cases in which HTTP/3 works over another port than 443 in Chrome?
As answered on the chromium-discuss mailing list, Chromium supports HTTP/3 only on UDP ports < 1024.
The reason can be found in the source code: Some shared Unix webservers allow individual users to publish their public_html
directory through HTTP and also to run custom services on ports >= 1024. A malicious user could set an Alt-Svc
header in their published directory to hijack future HTTP/3 connections to the webserver.