CMD Guide
HomeSystem DesignAPI Gateway

HTTP 10 vs 11 vs 20 vs 30

Why HTTP keeps getting rewritten

The HyperText Transfer Protocol (HTTP) is the request/response language browsers and servers speak. Its four production versions — 1.0 (1996), 1.1 (1997), 2.0 (2015), and 3.0 (deployed from ~2020, standardized 2022 as RFC 9114) — are not arbitrary upgrades. Each one attacks the dominant latency bottleneck of its era while keeping the same request/response semantics (methods, headers, status codes) intact. The verbs and status codes you know have barely changed; what changed underneath is how bytes get on and off the wire.

If you understand that single through-line — every version is a fight against round trips and blocked connections — the differences stop being trivia and become a design tool. This lesson builds that mental model from scratch, then proves it with one consistent, worked latency budget.

The mental model: it is all about round trips

Loading a page is rarely limited by bandwidth. It is limited by latency — the time light-in-glass and routers take to shuttle a packet to the server and back. That there-and-back time is one round trip time (RTT). On a decent connection an RTT is roughly 50 ms; on mobile it can be 100–300 ms.

Before a single byte of HTML moves, a secure connection has to be built, and each step below costs whole round trips:

So the game every HTTP version plays is: pay the handshake as few times as possible, and stop requests from waiting in line behind each other. Two enemies recur throughout this lesson — connection setup cost and head-of-line (HOL) blocking (one slow item stalling everything behind it).

diagram
diagram

HTTP/1.0 — one connection per request

How it works

HTTP/1.0 is the simplest possible design: open a TCP connection, send one request, read one response, close the connection. Need another file? Open another connection and pay the whole setup cost again. It is stateless and supports basic headers for content type, caching, and status.

The bottleneck it created

A real page is not one file — it is HTML plus stylesheets, scripts, and images. Under HTTP/1.0 each of those pays a fresh TCP handshake (and, once HTTPS arrives, a fresh TLS handshake too). Setup cost is paid per resource, so latency scales linearly with the number of files. This is the cost the next three versions spend twenty years chipping away at.

Where it was fine

Early static sites and single-file documents. When a page is essentially one resource, connection-per-request is not a problem — there is nothing to pipeline.

HTTP/1.1 — keep the connection open

What changed

The bottleneck that remained

HTTP/1.1 sends one request at a time per connection. It defined pipelining to send several requests without waiting, but responses still had to come back in order: a slow first response blocks every response queued behind it. This is application-layer head-of-line blocking, and it made pipelining so unreliable that browsers disabled it.

Browsers worked around the single-request-at-a-time limit by opening up to ~6 parallel connections per origin. That buys concurrency but multiplies the handshakes — a cost the worked example below makes concrete. (Sites pushed further with domain sharding — spreading assets across many hostnames to unlock even more connections — an optimization that HTTP/2 later turned into an anti-pattern.)

diagram
diagram

HTTP/2 — many streams, one connection

What changed

The bottleneck that remained

All those streams still ride a single TCP connection, and TCP guarantees in-order byte delivery. If one packet is lost, TCP holds back every stream until it is retransmitted — even streams that arrived fine. HTTP/2 removed HOL blocking at the application layer but left it at the transport layer. That is exactly the problem HTTP/3 exists to solve.

HTTP/3 — drop TCP, use QUIC

What changed

The trade-offs

QUIC lives in user space, so it can be more CPU-intensive than kernel TCP. Some corporate and mobile networks throttle or block UDP, so clients keep TCP-based HTTP/2 as a fallback. And 0-RTT data is replayable by an attacker — so it must only carry idempotent requests (safe to repeat), never something like a payment.

diagram
diagram

Worked example: a latency budget you can trust

Let us price the same page on all four versions under one consistent set of assumptions — the point is to compare apples to apples, so TLS is on for every version.

Assumptions (held constant)

Per-version cost

VersionHandshake costRequest wavesTotal RTTWall-clock
HTTP/1.07 serial connections × (TCP 1 + TLS 2) = 21 RTT7 serial requests = 7 RTT28 RTT~1400 ms
HTTP/1.16 connections handshake in parallel: TCP 1 + TLS 2 = 3 RTT wall-clock (18 RTT of work overlapped)7 files over 6 conns = 2 waves = 2 RTT5 RTT~250 ms
HTTP/2.01 connection: TCP 1 + TLS 2 = 3 RTTall 7 multiplexed = 1 wave = 1 RTT4 RTT~200 ms
HTTP/3.01 QUIC connection: transport + TLS 1.3 = 1 RTTall 7 multiplexed = 1 wave = 1 RTT2 RTT~100 ms

Reading the numbers honestly

diagram
diagram

Feature comparison

FeatureHTTP/1.0HTTP/1.1HTTP/2.0HTTP/3.0
Released1996199720152022 (RFC 9114; deployed from ~2020)
TransportTCPTCPTCPQUIC (UDP)
Connection modelNew conn per requestPersistent; ~6 parallelMultiplexed over 1 connMultiplexed over 1 QUIC conn
Message formatTextTextBinary framingBinary framing
Header compressionNoneNoneHPACKQPACK
Head-of-line blockingN/A (serial)Application layerTransport layer (TCP)Eliminated (per-stream)
Handshake (cold)TCP + TLS per fileTCP + TLS per connTCP + TLS once1-RTT; 0-RTT on resume
EncryptionOptionalOptionalOptional (TLS in practice)Mandatory (TLS 1.3)
Connection migrationNoNoNoYes (connection ID)
Typical useLegacy / staticUbiquitous baselineMost of the modern webReal-time, mobile, lossy links

When to use which (the judgment layer)

You rarely pick an HTTP version per request — client and server negotiate the highest they both support (via ALPN during TLS, and via the Alt-Svc header to discover HTTP/3). But you make real decisions about what to enable:

When the version barely matters: a single small API call over an already-warm connection is dominated by server processing, not by the protocol. The HTTP-version wins are about many resources and connection setup — optimize the version when those dominate, and profile the server otherwise.

Gotchas and real-world notes

Sources & further reading

Latency figures are illustrative, using RTT = 50 ms and a 7-resource page with TLS enabled on all versions; real-world results vary with network conditions, TLS version, resource sizes, and 0-RTT resumption.

🤖 Don't fully get this? Learn it with Claude

Stuck on HTTP 10 vs 11 vs 20 vs 30? Open Claude, copy a block below, and it'll teach you this exact concept — visually and interactively.

🎨 Explain it visually

Build the mental picture, not memorization.

I just read a lesson on **HTTP 10 vs 11 vs 20 vs 30** (System Design) and want to truly understand it. Explain HTTP 10 vs 11 vs 20 vs 30 from first principles using ONE vivid real-world analogy and a visual mental model — draw it as ASCII art or a clear step-by-step diagram — with a concrete example using real numbers. Then ask me one question to check I got the mental picture, and wait for my reply. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🤔 Walk me through it (interactive)

Socratic — adapts to where you're stuck.

Teach me **HTTP 10 vs 11 vs 20 vs 30** interactively. Ask me ONE guiding question at a time, wait for my answer, and adapt to my confusion — build the idea with me step by step instead of explaining it all at once. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🧪 Quiz me & fix my gaps

Active recall exposes what you missed.

Quiz me on **HTTP 10 vs 11 vs 20 vs 30** with 5 questions, easy to tricky, ONE at a time. Tell me if each answer is right; at the end, explain clearly what I got wrong and why. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🧠 Make it stick

Intuition + hook + flashcards for long-term memory.

Help me remember **HTTP 10 vs 11 vs 20 vs 30** for the long term: give the one-sentence intuition, a memorable hook/mnemonic, a tiny worked example, and 3 active-recall flashcards (Q -> A). If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.

📝 My notes