Part 8 · 2 chapters · ~12 min
HTTP from 1.1 to 3
HTTP semantics (RFC 9110) separated from the wire, HTTP/1.1 keep-alive and pipelining, HTTP/2 framing, streams and HPACK, HTTP/3 over QUIC, server push and why it died, caching headers, compression, and where each version is terminated in real deployments.
16
Three wires, one meaning
code
curl -sI --http1.1 https://example.com | head -1 # HTTP/1.1 200 curl -sI --http2 https://example.com | head -1 # HTTP/2 200 curl -sI --http3 https://example.com | head -1 # HTTP/3 200 (curl built with HTTP/3 support)
HTTP/1.1, HTTP/2, HTTP/3
the same semantics over three generations of transport
swipe the figure sideways, or tap expand for full screen
1/4
HTTP/1.1
Text requests and responses, keep-alive connections, but one outstanding request per connection in practice. Browsers open about six connections per host to parallelise; domain sharding and bundling were workarounds.
one request at a time per connectionsix connections per host
17
Where versions are terminated
In most production systems: browsers speak HTTP/3 or HTTP/2 to the CDN edge; the edge speaks HTTP/2 or HTTP/1.1 to the load balancer; the load balancer often speaks HTTP/1.1 to application pods (or HTTP/2 for gRPC). Server push (HTTP/2) was removed from browsers because it rarely beat preload hints and caching; 103 Early Hints replaced its main use.