From one version to the next.
WHAT THE ORIGINAL VERSION DID
One request per connection, then the connection closed.
WHAT VERSION ONE POINT ONE ADDED
Persistent connections, reused for several requests Host headers, allowing many sites per address Chunked transfer
WHAT REMAINED A PROBLEM
Requests on a connection completing in order, so one slow response blocked those behind it.
WHAT BROWSERS DID ABOUT IT
Opened several connections per host, typically six.
WHAT THAT CAUSED
Resource consumption, and workarounds like splitting assets across hostnames.
WHAT VERSION TWO CHANGED
A binary framing layer Several streams multiplexed over one connection Header compression Server push, now largely abandoned
WHAT THAT SOLVED
Head-of-line blocking at the application layer.
WHAT REMAINED
Head-of-line blocking at the transport layer, since a lost packet stalls every stream.
WHAT VERSION THREE CHANGED
Moving to a different transport entirely, which solves that.
WHAT TO UNDERSTAND
Each version addressed the bottleneck the previous one exposed.