Concept · Networking & APIs

HTTP/1.1, HTTP/2 and HTTP/3

Connection reuse, multiplexing, head-of-line blocking and QUIC.

3 minHTTP2HTTP3multiplexing

All three versions carry the same HTTP semantics — methods, status codes, headers. What changes is how requests travel over the network.

HTTP/1.1

  • Text protocol over TCP. Persistent connections (keep-alive) let several requests reuse a connection, but one at a time: a slow response blocks the requests behind it.
  • Browsers work around this by opening about six connections per origin, each with its own TCP and TLS handshake.

HTTP/2

  • Binary framing over one TCP connection, with many streams multiplexed at once: requests and responses interleave, so a slow response no longer blocks others at the HTTP level.
  • Header compression (HPACK) shrinks repetitive headers such as cookies.
  • Still on TCP, so a single lost packet stalls all streams until it's retransmitted (TCP head-of-line blocking).
  • gRPC runs on HTTP/2.

HTTP/3

  • Runs over QUIC on UDP. Each stream is delivered independently, so packet loss only delays the affected stream.
  • Faster connection setup: transport and TLS 1.3 handshakes combined into one round trip, zero for resumed sessions.
  • Connections survive network changes (Wi-Fi to mobile) because they're identified by connection ID.

Design implications

  • Long-lived multiplexed connections change load balancing. With HTTP/2 or gRPC, one client may send all its requests over one connection, so an L4 load balancer that balances connections can pin a busy client to one backend. Balance requests at L7 instead (API gateway vs load balancer).
  • Fewer connections, fewer handshakes. HTTP/2 and HTTP/3 make it cheaper to fetch many small resources; "bundle everything into one file" matters less than it did.
  • Clients vary. Serve HTTP/2 and HTTP/3 at the edge (CDNs do this for you) and accept that internal hops may still be HTTP/1.1.

See TCP vs UDP for the transport-level trade-offs.

Learn it in depth