In the previous article, we explored how HTTP/2 transformed web communication.
Instead of opening multiple TCP connections, HTTP/2 introduced multiplexing, allowing many streams to share a single connection.
This was a major breakthrough.
- Websites loaded faster
- Connections became more efficient
- Servers handled resources more intelligently
For a while, it seemed like the web's communication problems had finally been solved.
But engineers soon discovered an uncomfortable truth:
HTTP/2 solved many of HTTP's problems.
It did not solve all of TCP's problems.
And because HTTP/2 still relied on TCP, some bottlenecks remained.
To understand those bottlenecks, imagine you're watching a Netflix movie on your phone.
You're connected to your home Wi-Fi.
Everything is smooth.
Then you leave your house.
Your phone switches from:
Wi-Fi
↓
5G
For a brief moment, the video freezes.
A loading spinner appears.
A few seconds later, playback continues.
Most users blame the network.
But engineers ask a different question:
Why did the connection have to struggle in the first place?
Questions like this eventually led to one of the biggest protocol changes in the history of the web:
HTTP/3
The Hidden Success of HTTP/2
When HTTP/2 arrived, it solved a huge problem.
Instead of opening many TCP connections:
Browser
├── TCP 1
├── TCP 2
├── TCP 3
├── TCP 4
├── TCP 5
└── TCP 6
HTTP/2 introduced multiplexing.
Now everything could travel through one connection.
One TCP Connection
│
├── HTML
├── CSS
├── JavaScript
├── Images
└── Fonts
Less overhead.
Better efficiency.
Faster websites.
For a while, it looked like the problem was solved.
Then reality struck.
The Problem Nobody Could See
Imagine a highway with five lanes.
Cars are moving perfectly.
Suddenly a truck crashes in Lane 2.
What should happen?
Common sense says:
Lane 2 slows down.
Lanes 1, 3, 4, and 5 continue moving.
But TCP behaves differently.
TCP says:
Nobody moves until the missing vehicle is accounted for.
Everything waits.
Even traffic that wasn't affected.
This is essentially what happens when packet loss occurs.
Understanding Packet Loss
Data sent across the internet is divided into packets.
Imagine sending:
Packet 1
Packet 2
Packet 3
Packet 4
Packet 5
Now suppose Packet 3 disappears.
Maybe a router drops it.
Maybe Wi-Fi interference occurs.
Maybe a mobile network briefly weakens.
The receiver gets:
Packet 1 ✅
Packet 2 ✅
Packet 3 ❌
Packet 4 ✅
Packet 5 ✅
Humans would probably say:
Great.
We already have 1, 2, 4, and 5.
Let's continue.
TCP disagrees.
TCP's Obsession With Order
TCP was designed decades ago.
Its primary mission was reliability.
If data is sent:
1
2
3
4
5
TCP guarantees:
1
2
3
4
5
No missing pieces.
No reordering.
No shortcuts.
This reliability is amazing for:
- Banking systems
- Email delivery
- File downloads
- Database replication
But for modern web applications, it creates a hidden cost.
The Waiting Game
Imagine five HTTP/2 streams:
Connection
│
├── Stream A → HTML
├── Stream B → CSS
├── Stream C → JavaScript
├── Stream D → Images
└── Stream E → Fonts
Now one packet carrying image data gets lost.
Logically, only the image should be affected.
But because all streams share one TCP connection:
HTML ⏳ Waiting
CSS ⏳ Waiting
JavaScript ⏳ Waiting
Images ⏳ Waiting
Fonts ⏳ Waiting
Everything slows down.
Even resources that arrived successfully.
This phenomenon is called:
TCP Head-of-Line Blocking
One missing packet can temporarily stall the entire connection.
Why Mobile Networks Made Things Worse
Back in the early 2000s:
- Desktop computers dominated
- Wired connections were common
- Packet loss was relatively rare
Today:
- Smartphones generate most traffic
- Users move constantly
- Networks change frequently
A user may switch:
Home Wi-Fi
↓
Coffee Shop Wi-Fi
↓
4G
↓
5G
Packet loss is normal.
Temporary interruptions are normal.
Modern protocols must assume imperfect networks.
TCP was designed for a different era.
Engineers Asked a Radical Question
For decades the networking stack looked like this:
HTTP
↓
TCP
↓
IP
Nobody questioned it.
Using TCP felt as natural as using electricity.
Then engineers asked:
What if HTTP doesn't need TCP?
That question changed everything.
Meet QUIC
Google engineers began experimenting with a new transport protocol called QUIC.
Instead of building on TCP:
HTTP/2
↓
TCP
They built on UDP:
HTTP/3
↓
QUIC
↓
UDP
At first, this sounds crazy.
UDP is famous for being unreliable.
So why build the future of the web on top of it?
The Pizza Delivery Analogy
Think of TCP as a delivery company.
Every pizza must arrive.
Every pizza must arrive in order.
If Pizza #3 is delayed:
Pizza 4 waits
Pizza 5 waits
Pizza 6 waits
Maximum reliability.
But sometimes unnecessary waiting.
UDP works differently.
Send Pizza
↓
Hope It Arrives
Fast.
Simple.
But not reliable enough for modern web applications.
QUIC combines the best parts of both approaches.
The Genius of QUIC
QUIC provides:
UDP Speed
+
TCP Reliability
But it adds one critical improvement.
Streams become independent.
Imagine:
Stream A
Stream B
Stream C
If Stream A loses a packet:
Stream A waits
But:
Stream B continues
Stream C continues
This is the breakthrough.
One problem no longer freezes everything.
Why This Matters
Think about modern applications:
- YouTube
- Netflix
- ChatGPT
- Discord
- Google Docs
- Figma
These applications constantly exchange data.
Small delays affect user experience.
Reducing unnecessary waiting directly improves responsiveness.
HTTP/3 was designed for exactly this world.
Faster Connections With 0-RTT
Traditional HTTPS connections require multiple steps:
TCP Handshake
↓
TLS Handshake
↓
Data Transfer
Every step adds latency.
QUIC combines and optimizes much of this process.
For returning users, data can sometimes be sent immediately.
This feature is known as:
0-RTT (Zero Round Trip Time)
Benefits:
- Faster page loads
- Reduced latency
- Better user experience
- Improved responsiveness
Less waiting.
More doing.
Connection Migration: The Mobile Superpower
Remember our Netflix example?
With TCP, changing networks often means starting over.
Wi-Fi
↓
5G
The connection is typically re-established.
With QUIC:
Wi-Fi
↓
5G
The connection can survive the transition.
The session continues.
Users experience fewer interruptions.
This capability is called:
Connection Migration
And it's one of HTTP/3's biggest advantages on mobile networks.
The Evolution of HTTP
Every major HTTP version solved the largest bottleneck of its era.
HTTP/1.1
↓
Too Many Connections
HTTP/2
↓
Connection Inefficiency
HTTP/3
↓
Transport-Level Blocking
The history of HTTP is really the story of engineers continuously removing friction between users and information.
Visual Summary
HTTP/1.1
│
├── Multiple TCP Connections
├── Head-of-Line Blocking
└── High Connection Overhead
↓
HTTP/2
│
├── Multiplexing
├── Single TCP Connection
└── Better Efficiency
↓
HTTP/3
│
├── QUIC over UDP
├── Independent Streams
├── 0-RTT
└── Connection Migration
Key Takeaways
- HTTP/2 solved many HTTP/1.1 inefficiencies through multiplexing.
- TCP-level Head-of-Line Blocking still remained.
- Packet loss on one stream could affect unrelated streams.
- Modern mobile networks made this limitation more noticeable.
- QUIC was built on UDP to provide a more flexible transport layer.
- HTTP/3 uses QUIC instead of TCP.
- Independent streams reduce unnecessary waiting.
- Features like 0-RTT and Connection Migration improve real-world performance.
Frequently Asked Questions (FAQ)
Why doesn't HTTP/3 use TCP?
Because TCP's ordered-delivery model can cause Head-of-Line Blocking when packets are lost.
QUIC was designed to avoid this limitation while still providing reliability.
Is UDP reliable enough for the web?
Raw UDP is not.
QUIC adds reliability, encryption, congestion control, and stream management on top of UDP.
Does HTTP/3 completely replace HTTP/2?
Not immediately.
Most modern browsers and platforms support HTTP/3, but HTTP/2 remains widely deployed and will continue to coexist for years.
Is HTTP/3 always faster?
Not always.
However, it generally performs better on high-latency networks, mobile networks, and environments where packet loss occurs.
Does HTTP/3 still use TLS?
Yes.
In fact, encryption is built directly into QUIC.
HTTP/3 always operates securely.
One-Sentence Summary
HTTP/2 made one connection smarter; HTTP/3 made sure one lost packet could no longer slow down the entire conversation.
About the Author
I'm Anik Sikder, a backend engineer exploring distributed systems, networking, Python, Django, FastAPI, and software architecture.
I enjoy breaking down complex engineering concepts into practical mental models and real-world analogies that developers can actually remember.



