Skip to content
Devgo

HTTP/3 (QUIC)

HTTP/3 runs over QUIC, a UDP-based transport with built-in TLS 1.3, multiplexed streams, and no head-of-line blocking. It makes connections faster to establish and more resilient on flaky mobile networks.

When to use
  • Mobile and lossy-network clients.
  • Connection migration scenarios (switching networks).
When not to
  • Environments that block UDP.
  • When your LB/infra doesn't support QUIC connection-ID routing.

Definition

QUIC is a transport protocol on UDP that multiplexes many streams over one connection, encrypts by default ( 1.3), and lets one lost packet block only its stream. /3 is HTTP semantics over QUIC.

Why it exists

TCP+ has head-of-line blocking (one lost packet stalls all streams) and slow handshakes. QUIC fixes both and moves congestion control to userspace for faster iteration, improving mobile and lossy-link performance.

How it works

Client sends a 1-RTT (or 0-RTT) QUIC handshake carrying . Streams are independent; packet loss on one doesn't block others. Connection migration by connection ID survives IP changes (Wi-Fi→cellular).

Scaling limits

UDP handling and QUIC crypto CPU can be higher per connection than kernel TCP. Load balancing across QUIC connections needs the connection ID, not the 4-tuple, since IPs change.

Cost shape

Slightly more CPU per connection; offset by fewer handshakes (0-RTT) and better mobile completion. Some networks block/throttle UDP.

Alternatives

  • HTTP/2 over TCP — Universal support but head-of-line blocking across streams.
  • HTTP/1.1 — Simplest, but no multiplexing and more handshakes.

Failure modes

  • Middleboxes blocking UDP forcing fallback to TCP.
  • 0-RTT replay risk on non-idempotent requests.

, , ,