HTTP/2 vs HTTP/3 on a lossy link

HTTP/2 runs on TCP, so one lost packet stops every stream on the connection. HTTP/3 runs on QUIC, so a lost packet stops only its own stream. On a 90 ms path with 2 percent loss, HTTP/2 fails 91 percent of requests. HTTP/3 keeps p99 at 182 ms.

Play the level

Connections and streamsDrag or use arrow keys to change the protocol

HTTP/1.1 · connections: 6 · 30 files in 7 round trips, 630 ms

A page waits for its slowest callDrag or use arrow keys to change the calls per page

Calls per page: 20 · 18% of pages wait 2.0 s

The path has a 90 ms round trip and loses 2 percent of packets. It carries 100 assets/s of 20 KB each. p99 must stay below 320 ms and errors below 1 percent.

Case 1
Measure Goal HTTP/2 over one TCP connection HTTP/3 over one QUIC connection
p99 latency under 320 ms 10.1 s Fail 182 ms Pass
Error rate under 1% 91.2% Fail 0% Pass
Monthly cost 4 USD/mo 4 USD/mo
HTTP/2Mobile usersAPI server1 vCPU · 1 GB
HTTP/2Mobile usersAPI server1 vCPU · 1 GB
HTTP/2 over one TCP connection: misses a goal
HTTP/3Mobile usersAPI server1 vCPU · 1 GB
HTTP/3Mobile usersAPI server1 vCPU · 1 GB
HTTP/3 over one QUIC connection: meets the goals

The same path with no packet loss. Both protocols give p99 92 ms, so the choice does not matter here.

Case 2
Measure Goal HTTP/2 over one TCP connection HTTP/3 over one QUIC connection
p99 latency under 320 ms 92 ms Pass 92 ms Pass
Error rate under 1% 0% Pass 0% Pass
Monthly cost 4 USD/mo 4 USD/mo
HTTP/2Mobile usersAPI server1 vCPU · 1 GB
HTTP/2Mobile usersAPI server1 vCPU · 1 GB
HTTP/2 over one TCP connection: meets the goals
HTTP/3Mobile usersAPI server1 vCPU · 1 GB
HTTP/3Mobile usersAPI server1 vCPU · 1 GB
HTTP/3 over one QUIC connection: meets the goals