From HTTP/0.9 to HTTP/3: Evolution of Web Protocols Explained
This article traces the development of the HTTP protocol from its earliest 0.9 version through 1.0, 1.1, 2.0, and the modern HTTP/3 over QUIC, detailing key features, header compression, multiplexing, caching mechanisms, server push, and the security and performance trade‑offs of each iteration.
HTTP/0.9
Initially defined informally, HTTP/0.9 only supported a single-line GET request and returned raw HTML without headers or status codes.
<code>GET /index.html</code> <code><html>
<body>HELLO WORLD!</body>
</html></code>HTTP/1.0
Standardized in 1996, HTTP/1.0 introduced version numbers in requests, status lines in responses, headers (including Content‑Type and Content‑Encoding), support for POST and HEAD methods, and optional persistent connections.
Version number added to request line
Status line added to response
Headers introduced
Content‑Type for non‑HTML files
Content‑Encoding for compression (gzip, compress, deflate)
POST and HEAD methods
Optional keep‑alive connections
<code>GET /index.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)
200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html; charset=utf-8
<HTML>
A page with an image
<IMG src="/image.gif">
</HTML></code>HTTP/1.1
Released months after 1.0, HTTP/1.1 became the dominant version for a decade. Major improvements include persistent connections (keep‑alive), pipelining, chunked transfer encoding, enhanced caching controls, content negotiation, and the Host header for virtual hosting.
Keep‑alive connections by default
Pipelining to send multiple requests without waiting for each response
Chunked transfer encoding for dynamic content
Advanced cache‑control directives
Content negotiation (language, encoding, type)
Host header enables multiple domains on one IP
Cache Mechanisms
HTTP/1.1 adds strong cache (Pragma, Expires) and flexible cache‑control directives such as
no-store,
no-cache, and
max-age. Conditional requests use
Last-Modifiedand
ETagto return 304 when resources are unchanged.
Additional Methods
Five new request methods were introduced: OPTIONS, PUT, DELETE, TRACE, and CONNECT.
HTTP/2
Standardized in 2015, HTTP/2 (based on Google’s SPDY) replaces the textual format with binary frames, enabling header compression (HPACK), multiplexing multiple streams over a single TCP connection, server push, and improved performance.
Binary frame layer
Multiplexed streams eliminate head‑of‑line blocking at the HTTP layer
HPACK header compression reduces overhead
Server push allows the server to proactively send resources
HTTP/3 (HTTP‑over‑QUIC)
HTTP/3, standardized in 2022, runs over QUIC, a UDP‑based transport that provides low‑latency handshakes, 0‑RTT data, connection migration, and independent flow control per stream, addressing TCP‑level head‑of‑line blocking.
0‑RTT and 1‑RTT Handshakes
QUIC uses TLS 1.3 handshakes with optional 0‑RTT data, allowing clients to send encrypted application data on the first flight after caching server parameters.
Ordered Delivery
Each QUIC packet carries an offset field; the receiver reorders packets based on this offset to ensure in‑order delivery despite UDP’s unreliability.
Connection Migration
QUIC connections are identified by a 64‑bit Connection ID, so changing network interfaces (IP address) does not break the connection.
WeDoctor Frontend Technology
Official WeDoctor Group frontend public account, sharing original tech articles, events, job postings, and occasional daily updates from our tech team.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.