HTTP Protocol Evolution: HTTP/1.1 to HTTP/3

The evolution of HTTP from HTTP/1.1 through HTTP/2 to HTTP/3 (QUIC): key differences, performance implications, migration strategies, and adoption status.

The data

Versions

VersionYearTransportRfcKey featuresLimitationsPerformance tipsAdoptionMigration notesPerformance gains
HTTP/1.11999TCPRFC 7230-7235 (updated), RFC 2616 (original)
  • Persistent connections (keep-alive)
  • Chunked transfer encoding
  • Cache control (Cache-Control, ETag)
  • Content negotiation (Accept headers)
  • Range requests for partial content
  • Head-of-line blocking at application layer (one request at a time per connection)
  • Verbose text-based headers (no compression)
  • No server push capability
  • Multiple connections needed for parallelism (typically 6 per origin)
  • Domain sharding (splitting resources across multiple domains)
  • CSS sprites, image inlining, concatenation
  • Resource hints (preconnect, prefetch, preload)
  • Keep connection count optimal (not too many)
Near 100% — every web server and client supports itnullnull
HTTP/22015TCP (with binary framing layer)RFC 7540, RFC 7541
  • Binary framing layer (not text-based like HTTP/1.1)
  • Multiplexed streams (multiple requests in one connection)
  • HPACK header compression (eliminates redundant headers)
  • Server push (server sends resources before requested)
  • Stream prioritization (dependency tree)
  • Connection coalescing (multiple origins share one connection)
  • Head-of-line blocking at TCP layer (packet loss blocks ALL streams)
  • TCP congestion control affects all multiplexed streams
  • Server push often misused (better alternatives exist)
  • Requires TLS in practice (browsers only implement HTTP/2 over TLS)
  • Debugging harder than HTTP/1.1 (binary protocol)
null~40% of all websites (declining as HTTP/3 grows)Enable via reverse proxy (Nginx, Caddy) or CDN. No application changes needed. TLS 1.2+ required. Use h2 ALPN negotiation.null
HTTP/32022QUIC (UDP-based, with TLS 1.3 built-in)RFC 9114, RFC 9000 (QUIC), RFC 9001 (TLS over QUIC)
  • QUIC transport: 0-RTT connection establishment, connection migration
  • No TCP-level HOL blocking (separate streams, independent delivery)
  • Built-in TLS 1.3 encryption (no separate TLS layer)
  • Connection migration (survives IP/network changes)
  • Faster handshake (0-1 RTT vs 2-3 RTT for TCP+TLS)
  • User-space implementation (faster protocol evolution)
  • UDP-based — some firewalls/nat devices block or throttle UDP
  • Higher CPU usage than TCP (user-space processing)
  • QUIC not as mature as TCP stack (kernel optimizations)
  • Less tooling for debugging compared to TCP-based protocols
  • Some middleboxes still interfere with UDP traffic
null~35%+ of websites as of 2026. All major CDNs (Cloudflare, Fastly, Akamai) support it. All modern browsers support it.Enable at CDN level first. Verify UDP is allowed on network path (typically port 443 UDP). Keep HTTP/2 fallback. Monitor for middlebox interference.40-60% faster page loads on slow/mobile networks, especially with packet loss (3-10% loss: HTTP/3 vs HTTP/2 improvement is dramatic)

Fetch the same bytes

The static files are identical to what the API returns, but with no rate limit and no server round trip. Use the API when you want a query and a content type; use the files when you want to cache one document.

curl "https://yjtoon.com/api/dataset/http-protocol-evolution?format=toon"
const res = await fetch(
  "https://yjtoon.com/static-data/dataset/http-protocol-evolution.toon"
);
const toon = await res.text();

Rate limit: 120 requests per minute per IP, no key and no signup. API reference →

Topics

  • http
  • http2
  • http3
  • quic
  • protocol
  • performance
  • networking
  • tls