for multiple requests ◦ Still one request at a time • Pipelined connections ◦ Multiple requests at a time ◦ Requests are served in FIFO order (slow requests are blocking) ◦ Recommendation not to use it (Chromium project)
may carry one or more messages • Message: a complete sequence of frames that map to a request/response • Frame: smallest unit of communication in HTTP/2, containing a frame header, which at a minimum identifies the stream to which the frame belongs
between 1 and 256 • Each stream may depend on other streams • The combination of dependencies and weights will result in a prioritisation tree • This is used to prioritise CPU/memory allocation
the receiver • ~ TCP Flow Control (but it was not granular enough) • HTTP/2 does not implement an algorithm, but provides building blocks for this ◦ Is directional ◦ Is credit based ◦ Cannot be disabled ◦ It is hop-by-hop (an intermediary node can decide other algorithms)
(even if client did not request specifically) • Server builds dependency graph based on referer header • Server push streams are initiated by the PUSH_PROMISE frame (contain the HTTP headers of the promised resource) • Client can opt to reject the stream (RST_STREAM frame) • This is an optimisation over HTTP/1.1 inlining assets strategy (which was always forced)
• Based on a shared compression context that both client and server understand (Huffman code) • Has a static and a dynamic table ◦ Static table is used for common HTTP header fields ◦ Dynamic table is initially empty, but gets progressively built