All HTTP 1.0 should be upgraded to HTTP 1.1
Summary of recommendations made in another book by Steve Souders:
More concisely: “eliminate and reduce unnecessary network latency, and minimize the amount of transferred bytes.”
More things:
keepalive
, and reduce the number of required HTTP handshakes
between server and a single clientHTTP/1 does not modify the core semantics of HTTP/1 in any way:
GET
, POST
, etc.)Aims to increase speed, and reduce latency, compared to HTTP/1:
Wrap HTTP/1 text value in a binary frame, and standardise format for all variables such as white spaces and termination sequences When the binary frame is unwrapped, it may be treated identically to a HTTP/1 text value.
Each connection consists of multiple streams; each stream consists of multiple frames; multiple frames make up a single request-response pair.
?? Does each frame contain an additional HTTP/2 level header to identify which stream it belong to, and its sequence number?
In summary: Many different streams, messages, and frames all share the same TCP connection, and can be sent in any order; with the recipient inspecting them to reassemble them correctly.
Streams may assign both weights and dependencies on other streams. The sender and the receiver use these to build a prioritisation tree, and use this to determine and optimised order and bandwidth allocation in transmitting each of the streams.
Self-explanatory: Since there is no need to make multiple connections to a single server any more, multiple connections are explicitly disallowed.
This optimises for numerous “bursty” connections, instead of small numbers of large “bulky” connections. This is important to remember, because it means that many of the HTTP/1 optimisation techniques such as spriting or concatenation may no longer result in performance gains.
Great, protocol-level way of fending of DoS’es! But not so much DDoS’es. Maybe.
Reduces the need to use long polling where it was necessary in HTTP/1; and also reduces the need for more simple use cases of websockets