Skip to content
HTTP/1.1 vs HTTP/2 vs HTTP/3: The Evolution of Web Communication 5 min

HTTP/1.1 vs HTTP/2 vs HTTP/3: The Evolution of Web Communication

SD
ScaleDojo
May 11, 2026
5 min read1,121 words
1
http123.png

A Brief Story of Getting Faster

In September 2015, Google measured that Chrome users on HTTP/2 loaded pages 15-25% faster than those on HTTP/1.1. By 2020, Google was already testing HTTP/3, which cut page load times another 30% on mobile networks. Each generation of HTTP solved a specific bottleneck that real engineers hit at real scale. This comparison of HTTP/1.1 vs HTTP/2 vs HTTP/3 is really the story of those bottlenecks and how each one got solved.

Think of HTTP like the rules for how a customer (your browser) orders food at a restaurant (the server). The rules have changed three times, and each time, the restaurant got dramatically faster at serving people.

httpvs other versions.png

HTTP/1.1: One Order at a Time

HTTP/1.1 is like a restaurant where you can only have one conversation with the waiter at a time. You ask for bread, wait for it to arrive, then ask for soup, wait for that, then ask for your main course. Each request blocks the next one. This is called head-of-line blocking.

Browsers worked around this by opening multiple TCP connections to the same server (like having 6 waiters serving you simultaneously). But each connection has overhead - the three-way handshake, TLS negotiation, memory on both sides. It is wasteful.

A typical modern webpage needs 80+ resources (HTML, CSS, JavaScript, images, fonts). With HTTP/1.1, loading all of them is painfully serialized even with multiple connections.

The Workarounds Engineers Built

Before HTTP/2 existed, developers invented clever hacks to work around HTTP/1.1 limitations: domain sharding (splitting resources across cdn1.example.com, cdn2.example.com to open more connections), CSS sprites (combining dozens of icons into one image), and concatenating all JavaScript into a single file. These hacks worked but added complexity and actually make things worse with HTTP/2.

HTTP/2: Many Orders on One Connection

HTTP/2 introduced multiplexing. Now imagine a restaurant where you can fire off all your orders at once, and the kitchen sends dishes back as they become ready - all through a single waiter (one TCP connection).

Key improvements in HTTP/2:

  • Multiplexing - multiple requests and responses flow simultaneously over one connection

  • Header compression (HPACK) - HTTP headers are repetitive, so HTTP/2 compresses them, saving 80%+ bandwidth on headers

  • Server push - the server can proactively send resources it knows the client will need (like sending the CSS before the browser even asks for it)

  • Stream prioritization - the browser can tell the server which resources are most important

How Multiplexing Actually Works

HTTP/1.1: Sequential (head-of-line blocking)

  Client ---- Req A ---------> Server
  Client <--- Resp A ---------- Server
  Client ---- Req B ---------> Server    // must wait for A
  Client <--- Resp B ---------- Server
  Client ---- Req C ---------> Server    // must wait for B
  Client <--- Resp C ---------- Server

HTTP/2: Multiplexed (interleaved on one connection)

  Client ---- Req A ---------> Server
  Client ---- Req B ---------> Server    // sent immediately
  Client ---- Req C ---------> Server    // no waiting
  Client <--- Resp B (done!) -- Server   // B finished first
  Client <--- Resp C (done!) -- Server   // C finished next
  Client <--- Resp A (done!) -- Server   // A was slowest

But HTTP/2 still runs on TCP, and TCP has a fundamental limitation: if one packet is lost, ALL streams on that connection stall until the lost packet is retransmitted. This is TCP-level head-of-line blocking. The multiplexing gains are undermined on lossy networks.

HTTP/3 and QUIC: Breaking Free from TCP

HTTP/3 makes a radical choice: it abandons TCP entirely and runs on QUIC, which is built on top of UDP.

Why? Because QUIC can handle packet loss per-stream. If one stream loses a packet, only that stream waits for retransmission. All other streams continue flowing normally. This is huge for real-world networks where packet loss happens constantly (especially on mobile).

HTTP/2 over TCP: One lost packet blocks ALL streams

  Stream A:  [pkt1][pkt2][LOST][pkt4]...
  Stream B:  [pkt1][pkt2]  BLOCKED  ...
  Stream C:  [pkt1]        BLOCKED  ...
  // TCP stalls everything until the lost packet is retransmitted

HTTP/3 over QUIC: Loss affects only that stream

  Stream A:  [pkt1][pkt2][LOST][pkt4]...  // only A waits
  Stream B:  [pkt1][pkt2][pkt3][pkt4]...  // flows normally
  Stream C:  [pkt1][pkt2][pkt3]        ...  // flows normally

Additional QUIC benefits:

  • 0-RTT connection establishment - if you have connected before, you can start sending data immediately without any handshake

  • Connection migration - when you switch from WiFi to cellular, your connection survives because QUIC identifies connections by ID, not by IP address

  • Built-in encryption - TLS 1.3 is baked into the protocol, not layered on top

  • Faster loss recovery - QUIC has more sophisticated algorithms for detecting and recovering from packet loss

Connection Setup: The Speed Difference

HTTP/1.1 + TLS 1.2:   3 round trips before first byte
  [TCP handshake: 1 RTT] + [TLS handshake: 2 RTT]

HTTP/2 + TLS 1.3:     2 round trips before first byte
  [TCP handshake: 1 RTT] + [TLS 1.3: 1 RTT]

HTTP/3 (QUIC):        1 round trip before first byte
  [QUIC handshake: 1 RTT]  (TCP + TLS combined)

HTTP/3 (repeat visit): 0 round trips
  [0-RTT resumption]  (data sent with first packet!)

On a 100ms latency connection (New York to London), that is the difference between 300ms of setup (HTTP/1.1) and 0ms (HTTP/3 repeat visit). At billions of page loads per day, this is enormous.

Performance Comparison

On a connection with 2% packet loss (common on mobile networks):

  • HTTP/1.1: Page load might take 8 seconds (each lost packet blocks everything)

  • HTTP/2: Page load might take 5 seconds (multiplexing helps but TCP HOL blocking hurts)

  • HTTP/3: Page load might take 2.5 seconds (per-stream loss handling means only affected streams stall)

System Design Implications

When designing systems, the HTTP version matters:

  • For APIs serving mobile clients with unreliable connections, HTTP/3 support dramatically improves user experience

  • For internal microservice communication on reliable networks, HTTP/2 gives you multiplexing without the complexity of QUIC

  • For legacy compatibility, HTTP/1.1 is still universally supported and simpler to debug

  • Load balancers and CDNs need to be configured to support the version you choose

  • gRPC requires HTTP/2 as its transport - if you adopt gRPC for microservices, HTTP/2 is mandatory

Who Uses What in Production

  • Google, YouTube, Gmail: HTTP/3 enabled for all users since 2022. ~30% of Google traffic now uses QUIC.

  • Cloudflare: offers HTTP/3 for all customers, reports 12% improvement in time-to-first-byte on mobile

  • Facebook/Meta: HTTP/3 for mobile apps, measured 6-15% latency reduction globally

  • AWS CloudFront: supports HTTP/3 since 2022 for CDN edge delivery

Interview Tip

If asked about HTTP in a system design interview, mention all three versions and when each is appropriate. The key insight is: HTTP/2 solved application-layer HOL blocking with multiplexing but introduced TCP-layer HOL blocking. HTTP/3 solved both by moving to QUIC. Showing this layered understanding of the problem demonstrates architectural thinking.

Key Takeaway

HTTP evolved from sequential (1.1) to multiplexed (2) to loss-tolerant (3). Each version solved a specific performance bottleneck. When designing at scale, choosing the right version for each communication path can mean the difference between a snappy app and a sluggish one.

Enjoyed this article?

Share it with your network to help others level up their system design skills.

Discussion0

Join the Discussion

Sign in to leave comments, reply to others, or like insights.

Sign In to ScaleDojo

No comments yet. Be the first to start the thread!

Related Articles

Enjoyed this content?

Your support keeps us creating free resources

We put a lot of hours into researching and writing these guides. If it helped you, consider buying us a coffee. Every bit goes toward keeping ScaleDojo's content free and growing.

$

One-time payment via Stripe. ScaleDojo account required.

ScaleDojo Logo
Initializing ScaleDojo