Early HTTP was inefficient—each request opened a new TCP connection, adding latency. The protocol needed evolution to handle modern web scale.
HTTP has evolved through four major versions, each adding performance and capability improvements while maintaining backward compatibility at the application level.
- Each request opens a new TCP connection
- No persistent connections—significant latency
- Text-based protocol
- Persistent connections: Multiple requests over one TCP connection
- Chunked transfer encoding
- Better caching (ETag, If-None-Match)
- Pipelining (later disabled due to HOL blocking)
- Multiplexing: Multiple requests/responses in parallel over one connection
- Binary framing (more efficient to parse than text)
- Header compression (HPACK)
- Server Push (server sends resources before client asks)
- Built on QUIC (runs over UDP, not TCP)
- Faster connection establishment
- No head-of-line blocking (even with packet loss)
- Continues multiplexing benefits
| Version | Transport | Key Feature |
|---|---|---|
| 1.0 | TCP/new | None (baseline) |
| 1.1 | TCP/persistent | Reusable connections |
| 2.0 | TCP/binary | Multiplexing, server push |
| 3.0 | QUIC/UDP | No HOL blocking |
- Evolves from: HTTP (the protocol)
- Relates to: Packet Switching (underlying transport mechanism)
- Related to: HTTP Headers (HPACK compression in HTTP/2)
- Related to: CORS (pre-flight benefits from version capabilities)
- HTTP/2 doesn’t require encryption (but browsers only support h2 over TLS)
- HTTP/3 still has limited server support
- HTTP/1.1 pipelining was disabled due to bugs—HTTP/2 fixed this