Intermediate

HTTP/HTTPS Internals

Inspect a real HTTP request and TLS handshake with curl and openssl, then compare HTTP/1.1, HTTP/2, and HTTP/3 directly against the same server to see exactly what each version changes and why.

~3h
0 / 7 steps
🚀
Intro

Same semantics, three very different transports

Prerequisites: TCP/IP Fundamentals; DNS Deep Dive.

Here's the detail that makes HTTP's version history easy to reason about: the request methods, status codes, and header semantics you already know (GET, POST, 200, 404, Content-Type) have stayed essentially constant across HTTP/1.1, HTTP/2, and HTTP/3. What's changed, version to version, is entirely about how those semantics get transported — the wire format and the underlying connection. HTTP/1.1 sends plain text over TCP. HTTP/2 sends a binary framing format, multiplexed over a single TCP connection. HTTP/3 keeps HTTP/2's multiplexing idea but moves off TCP entirely, onto QUIC — a transport protocol built on UDP.

This project inspects all three directly against real infrastructure, plus the TLS handshake that (with the narrow exception of plaintext HTTP/1.1 on port 80) now underlies practically every request on the modern web.

🔨

Anatomy of a request with curl -v

🔨

The TLS handshake underneath

🔨

HTTP/2: multiplexing, and the head-of-line blocking it doesn't fully solve

🔨

HTTP/3 and QUIC: check it directly against a real site

🎯
Secret Mission

Secret Mission: benchmark the same resource three ways

🧹
Wrap Up

Before You Go

Pro

Test what you just learned

Self-testing is one of the best ways to retain new skills. Unlock project quizzes to check your understanding.

Log in to unlock