That’s not a valid site address. You need to use the full domain. * is not a full-range wildcard, it only matches a single label (parts between . dots) and can only be used on the left, not the right.
That’s not possible from a networking standpoint. You’d need to either use different port numbers, or bind to more than one network interface (IP address).
When you configure Caddy to listen on port :443, this is one server. A given server can only have one configuration for protocols, because protocol choice happens before the server even knows what the domain is (because it needs to use those protocols to unpack the data and then read the domain in the payload).
You need to use the servers global option to configure servers and their protocols. See the docs:
servers does not take domains, it takes a bind address + port. And it does not take wildcards. By default the bind address is “empty”, as in “bind to every network interface”, e.g. :443, but it could be 127.0.0.1:443 to only bind to the loopback interface (to only handle IPv4 connections from the same machine, and not from outside).
Please re-read the Server Options docs I linked above.
No, that’s just an “advertisement” of HTTP/3 support. It’s not a protocol upgrade. It doesn’t work like WebSockets.
HTTP/3 is a totally separate connection (and is over UDP instead of TCP), it has no relationship to other connections.
You can’t actually force http3 for now - browsers will always try to connect using http2/1 first and if http3 is available, using http3 for subsequent requests. There is a workaround, just don’t serve any content and tell visitors this site can only be viewed using http3 .
To force specific http versions, you can set tls alpn. I did it in one of my blogs.