HTTP/3 & QUIC
debt(d5/e3/b3/t5)
Closest to 'specialist tool catches it' (d5). Detection hints list curl, chrome-devtools, and cloudflare — these are specialist tools rather than default linters. The code pattern described (HTTP/2 in use with no HTTP/3 support, high latency on mobile) requires deliberate investigation with tools like `curl --http3` or Chrome DevTools network panel to identify missing HTTP/3 support. It won't surface automatically in a standard build pipeline.
Closest to 'simple parameterised fix' (e3). The quick_fix describes enabling HTTP/3 in Nginx 1.25+ with `quic` and `http3` directives, plus serving the Alt-Svc header and opening UDP port 443 in firewall rules. This is slightly more than a one-line patch (involves config changes across web server config and possibly firewall/infrastructure rules) but is contained within one component/service, not a cross-codebase refactor.
Closest to 'localised tax' (b3). The applies_to scope is web contexts only, and the choice is an infrastructure/protocol-layer concern at the edge (web server config, CDN settings). It doesn't propagate into application code or impose ongoing cognitive load on developers writing business logic — it's a localised operational commitment at the server/networking layer.
Closest to 'notable trap' (t5). The misconception field explicitly states that developers believe HTTP/3 is just HTTP/2 over UDP, when in fact QUIC reimplements TCP reliability and TLS at the transport layer with fundamentally different characteristics. Common mistakes also include assuming HTTP/3 is always faster and forgetting UDP firewall rules — these are documented gotchas that most developers eventually encounter rather than catastrophic misunderstandings.
Also Known As
TL;DR
Explanation
HTTP/2 over TCP has head-of-line blocking: a single lost packet stalls all multiplexed streams. HTTP/3 uses QUIC (Quick UDP Internet Connections) — each stream is independent, a lost packet only affects that stream. QUIC also combines TLS handshake with the connection handshake (0-RTT or 1-RTT vs TCP+TLS 3-RTT), dramatically reducing connection setup time. PHP servers: Caddy and nginx (with QUIC patch) support HTTP/3. CDNs (Cloudflare, Fastly) front-end HTTP/3 transparently. Impact is most significant for mobile users on lossy networks.
Common Misconception
Why It Matters
Common Mistakes
- Not serving Alt-Svc header — clients need to discover HTTP/3 support before upgrading.
- Assuming HTTP/3 is always faster — on good networks the difference is small; the benefit is on lossy mobile connections.
- Not testing HTTP/3 connectivity — use curl --http3 to verify it works end-to-end.
- Forgetting UDP firewall rules — QUIC uses UDP port 443 which may be blocked by corporate firewalls.
Code Examples
// nginx without HTTP/3 — missing performance on mobile:
server {
listen 443 ssl http2;
# No QUIC/HTTP3 support
# Mobile users on lossy networks get HTTP/2 head-of-line blocking
}
# nginx with HTTP/3 (nginx-quic build):
server {
listen 443 ssl http2;
listen 443 quic reuseport; # HTTP/3 on UDP
ssl_protocols TLSv1.3; # QUIC requires TLS 1.3
# Advertise HTTP/3 support:
add_header Alt-Svc 'h3=":443"; ma=86400';
# Or use Cloudflare/Fastly CDN:
# They handle HTTP/3 termination automatically