History and Future
History
| Year | Version | Key Milestone |
|---|---|---|
| 1991 | HTTP/0.9 | Tim Berners-Lee's original protocol. Single-line GET request, HTML-only response, no headers, no status codes. |
| 1996 | HTTP/1.0 (RFC 1945) | Added headers, status codes, content types, and POST/HEAD methods. One request per TCP connection. |
| 1997 | HTTP/1.1 (RFC 2068) | Persistent connections, Host header (virtual hosting), chunked encoding, content negotiation. |
| 1999 | HTTP/1.1 (RFC 2616) | Consolidated and revised specification. The reference for over a decade. |
| 2014 | HTTP/1.1 (RFC 7230β7235) | Split into six focused documents, clarified edge cases, obsoleted RFC 2616. |
| 2022 | HTTP (RFC 9110/9112) | Current standard. Separated semantics (9110) from message syntax (9112). Version-agnostic semantics. |
HTTP/0.9 (1991)
The original protocol had no version number, no headers, and no status codes. A request was a single line:
GET /page.html
The server responded with raw HTML and closed the connection. That's it. No content type, no error handling, no metadata.
HTTP/1.0 (1996)
HTTP/1.0 (RFC 1945) added the features we now consider essential:
- Headers β both request and response headers for metadata.
- Status codes β
200 OK,404 Not Found,500 Internal Server Error. - Content types β the
Content-Typeheader, enabling non-HTML responses. - New methods β
POSTandHEADalongsideGET.
The major limitation: one request per TCP connection. Loading a page with 20 images meant 20 separate TCP connections, each with handshake overhead.
HTTP/1.1 (1997β2022)
HTTP/1.1 was a major leap that introduced:
- Persistent connections β reuse TCP connections across multiple requests.
- Host header β required in every request, enabling virtual hosting.
- Chunked transfer encoding β stream responses of unknown size.
- Content negotiation β
Accept,Accept-Language,Accept-Encoding. - Caching β
Cache-Control,ETag, conditional requests. - Range requests β partial content delivery for resumable downloads.
- Pipelining β send multiple requests without waiting (though rarely used in practice).
The specification was revised multiple times:
- RFC 2068 (1997) β initial specification.
- RFC 2616 (1999) β consolidated revision, the reference for 15+ years.
- RFC 7230β7235 (2014) β split into six focused documents for clarity.
- RFC 9110β9112 (2022) β current standard, separating semantics from wire format.
HTTP Today
HTTP/1.1
Still widely deployed and the dominant protocol for:
- Server-to-server communication behind load balancers.
- Reverse proxies and internal APIs.
- Environments where simplicity and debuggability matter.
- Legacy systems and embedded devices.
Its text-based format makes it uniquely accessible for debugging β you can literally read the bytes on the wire.
HTTP/2 (2015, RFC 9113)
HTTP/2 addressed HTTP/1.1's performance limitations:
- Binary framing β messages are encoded in binary frames instead of text. More compact and less error-prone to parse.
- Multiplexing β multiple concurrent request/response exchanges on a single connection, eliminating head-of-line blocking at the HTTP layer.
- Header compression (HPACK) β compresses headers using a static table and dynamic indexing. Headers like
Host,Accept, andUser-Agentthat repeat on every request are sent efficiently. - Server push β the server can proactively send resources it knows the client will need. (Largely deprecated β Chrome removed support in 2022.)
- Stream prioritization β clients can indicate which resources are more important.
HTTP/2 keeps the same semantics (methods, status codes, headers) as HTTP/1.1 β it only changes how messages are framed on the wire. Most HTTP/2 deployments use TLS (the h2 protocol identifier negotiated via ALPN).
HTTP/3 (2022, RFC 9114)
HTTP/3 replaces TCP with QUIC, a UDP-based transport:
- No TCP head-of-line blocking β packet loss on one stream doesn't block others. In HTTP/2 over TCP, a single lost packet stalls all streams.
- 0-RTT connection setup β QUIC combines the transport and TLS handshake into a single round-trip. Resumed connections can send data immediately (0-RTT).
- Connection migration β a QUIC connection survives network changes (e.g., switching from Wi-Fi to cellular) because it's identified by a connection ID, not a source IP+port tuple.
- Built-in encryption β TLS 1.3 is mandatory and integrated into the transport layer.
- Header compression (QPACK) β similar to HPACK but designed for QUIC's out-of-order delivery.
The Future
Active work in the IETF HTTP Working Group includes:
- WebTransport β bidirectional, multiplexed transport for web applications, built on HTTP/3. Enables use cases like game networking and live media that need both reliable and unreliable delivery.
- HTTP Datagrams (RFC 9297) β unreliable datagram delivery over HTTP connections. Enables latency-sensitive applications that can tolerate packet loss.
- MASQUE proxying β using HTTP CONNECT-UDP and CONNECT-IP for tunneling arbitrary IP and UDP traffic through HTTP proxies. Enables VPN-like functionality over HTTP infrastructure.
- Resumable uploads β standardizing the ability to pause and resume large file uploads (draft-ietf-httpbis-resumable-upload).
- Ongoing refinement of HTTP semantics, caching specifications, and security best practices.
Alternatives to HTTP
HTTP is not the only application-layer protocol. Depending on the use case, other protocols may be a better fit:
| Protocol | Transport | Use Case |
|---|---|---|
| gRPC | HTTP/2 | High-performance RPC with Protocol Buffers. Strongly typed contracts, streaming, deadlines. Common for microservice communication. |
| WebSocket | TCP (HTTP Upgrade) | Full-duplex, persistent connection. Real-time applications like chat, live dashboards, collaborative editing. |
| MQTT | TCP | Lightweight pub/sub messaging for IoT and constrained devices. Tiny packet overhead, QoS levels, retained messages. |
| CoAP | UDP | Constrained Application Protocol β REST-like semantics for low-power, lossy networks. Uses UDP with optional reliability. |
| AMQP | TCP | Advanced Message Queuing Protocol β reliable message brokering with routing, queuing, and transactions. (RabbitMQ, Azure Service Bus.) |
| FTP | TCP | File transfer protocol. Still used for legacy integrations, bulk file exchange, and some hosting workflows. |
| SMTP | TCP | Email delivery. Purpose-built for store-and-forward message delivery across mail servers. |
Learn More
Videos
- HTTP Crash Course & Explore β Traversy Media
- How HTTP Requests Work β LiveOverflow
- HTTP/1 to HTTP/2 to HTTP/3 β Hussein Nasser
Documentation
- MDN: An overview of HTTP β beginner-friendly reference.
- RFC 9110 β HTTP Semantics β the current specification for HTTP semantics.
- RFC 9112 β HTTP/1.1 β the current specification for HTTP/1.1 message syntax.
- RFC 9113 β HTTP/2 β the HTTP/2 specification.
- RFC 9114 β HTTP/3 β the HTTP/3 specification.
- IETF HTTP Working Group β active drafts, meeting notes, and mailing list.
- High Performance Browser Networking β Ilya Grigorik's free online book covering HTTP, TLS, and networking performance.