WEBMACHA

WebMacha HTTP/2

The client starts downloading an 80 KB photo, then changes its mind once the first DATA frame lands. It sends RST_STREAM (RFC 9113 §6.4) with the error code CANCEL (RFC 9113 §7), and on its side the stream closes at once. The server does not know yet: the RST_STREAM takes 21 ms to reach it, and it keeps sending. Two more DATA frames are already on the wire, and one more leaves before the RST_STREAM arrives, spending the last of the connection's 65 535-byte window. Once the RST_STREAM lands, the server drops the rest of the body. The three late frames still land; the client discards them, but they count against the connection's window, so its WINDOW_UPDATEs give that credit back (RFC 9113 §5.1, RFC 9113 §6.9). Only the stream ends, not the connection, so the next request opens a new stream on the same connection, and its DATA waits for that credit. The cancel is an intervention, the kind the Intervene menu adds.

The pipe

client windows
server windows

Step 0 of 31

Streams at this step
s0 connection SET 1 frames
s1 photo not open yet
s3 next not open yet
Reset
Step 0 · SETTINGS · stream 0 · leaves client → server

The client sends its SETTINGS

Before any frame, the client sends the 24-octet connection preface, PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n. RFC 9113 §3.4 chose it so that a large proportion of HTTP/1.x servers and intermediaries do not process further frames. It is not a frame, so it is not drawn. Then SETTINGS states what the client will accept: frames of up to 16 384 bytes (MAX_FRAME_SIZE), 65 535 bytes per stream before the server must wait for more window (INITIAL_WINDOW_SIZE). It also turns server push off (ENABLE_PUSH 0); the hub does not model it anyway.

moment
leaves the client
sent at
0 ms
received at
21 ms
length
18 bytes
flags
none

Settings

SETTINGS_ENABLE_PUSH
0
SETTINGS_INITIAL_WINDOW_SIZE
65 535
SETTINGS_MAX_FRAME_SIZE
16 384

RFC 9113 §3.4 · RFC 9113 §6.5.2

Lifecycle

RFC 9113 §5.1
from the client's side send HEADERS send HEADERS + ES send ES recv ES RST_STREAM recv ES · RST send ES · RST idle open half-closed (local) half-closed (remote) closed

ES is END_STREAM. Select a state to read about it. RFC 9113 §5.1 also has two reserved states for server push; they are left out because push is not modelled.

Step 0 of 31: The client sends its SETTINGS