I did some testing of HTTP3 and got the surprising result that HTTP3 has more overhead for single requests than HTTP1.1 or HTTP2. Surprising, as it is advertised the other way round.
What I did was using curl (version 8.8.0 with HTTP3 support compiled in) against different servers and monitored the network transfers using tcpdump.
I used the --http1.1, --http2, --http3 options of curl respectively to force direct usage of the desired HTTP version. (I checked that there aren't any TCP packets at all with --http3, it really uses HTTP3 directly.)
It tried it against a self-hosted NGINX 1.26.0, google.com and the example server of python-aioquic (http3_server.py).
From my self-hosted servers I transfered just a 5-byte dummy file, for Google I asked for https://google.com/x (resulting in a 404 and some blurb).
This is what I get:
Number of packets:
| Server | http1.1 | http2 | http3 |
|---|---|---|---|
| NGINX | 19 | 21 | 25 |
| python http.server / aioquic | 14 | 15 | |
| 20 | 32 | 28 |
Total bytes transferred:
| Server | http1.1 | http2 | http3 |
|---|---|---|---|
| NGINX | 4502 | 4538 | 10394 |
| python http.server / aioquic | 2279 | 4955 | |
| 9804 | 9946 | 13701 |
Any ideas what is wrong here?