Protocol notes for this page (click to expand)

HTTP (Hypertext Transfer Protocol) 1.1 / 2 / 3

What it is for

★★★ HTTP's semantics have barely changed: method, path, headers, body going out; status code, headers, body coming back. GET /index.html means the same thing in all three generations.

★★ What keeps changing is how it is packed onto the wire and what it is carried on. So the three scenarios here are the three generations -- one request, packed three ways.

★★★ The three generations, and what HTTPS is

· 1.1: plain text, and one connection can carry only one request at a time;
· HTTPS: ★not a generation but an inserted layer -- HTTP placed inside TLS, with the semantics untouched;
· 2: binary frames multiplexed by stream ID -- but still over a single TCP connection;
· 3: the whole thing moved onto QUIC, where streams live below, so one loss stalls only one of them.

★★ The stack of grey blocks in each diagram is what that generation rides on.

★ Common misconceptions

★★★ "HTTPS is a different protocol" -- it is not. It is HTTP plus TLS: methods, status codes and headers are unchanged, and even the port merely moves from 80 to 443.

★★★ "HTTP/2 fixed head-of-line blocking" -- it fixed the HTTP half. One loss on the single TCP connection underneath stalls every stream, which is exactly the last step of scenario 2.

★★ "HTTP/3 uses UDP, so it is unreliable" -- the reliability lives in QUIC.