From 5842b26e8353a38192afb1ebe4c08809da48dbf4 Mon Sep 17 00:00:00 2001 From: eunhhu Date: Mon, 19 Oct 2026 03:02:51 +0100 Subject: 140's 9, HTTP/1.1 requests a packet at a time (RFC 9112), written in aup with no new opcode (aup's examples/http.aup: each packet an event, its bytes added to what the last left, every request they complete read, h11's grammar): 200 streams (132,623 bytes, 578 requests: methods, targets, HTTP/1.1 and a last 1.0, mixed-case names, spaces around values, Content-Length and chunked bodies with extensions and trailers, some ending in part of a request) fed whole, at random boundaries and a byte at a time (the 50 under 400 bytes), the requests read h11's on every cut and the bytes left those after them, the three paths' outputs the same bytes; 200 damaged streams fed whole as http_requests.py (the Python reference) reads them, 35 refused by both and 165 the same; module_specs in make check: 80 streams and their reading (tests/specs/http, no h11 at check time) whole on the three paths and cut 88 ways; bars: written, three workarounds (the bytes left in a list of one: bytes are no state; names and codings compared as text: bytes have no ==; field lines returned in a record: a fn returns no bare list), 159 lines against Python's 79, 278 ns a byte against the same algorithm in C 3.27 (85x), pure Python 67 (its bytes methods are C: Pure 4.1x slower), h11 284; 140's decision point after 027: bytes alone as a state (inflate, HTTP) and bytes' == (DNS, HTTP) now each met by two written specs, so the two-spec rule lets them into the core (their design not begun); a view calling a block fn met by one (DNS); aup's three its compiler's; CHECKPOINT's direction row --- tests/specs/http/README.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 tests/specs/http/README.md (limited to 'tests/specs/http/README.md') diff --git a/tests/specs/http/README.md b/tests/specs/http/README.md new file mode 100644 index 0000000..6bc44c7 --- /dev/null +++ b/tests/specs/http/README.md @@ -0,0 +1,9 @@ +# HTTP/1.1 request streams and their reading + +`streams.bin` is the first 80 of the 200 streams `research/experiments/044-specs/http_check.py` makes (its seed 140): +pipelined requests with methods, targets, HTTP/1.1 and a last HTTP/1.0, fields with mixed-case names and spaces around +their values, bodies by Content-Length or chunked with extensions and trailers, some ending in part of a request. Each +is a u32 big-endian length, then its bytes. `read.json` is what `http_requests.py` reads from each (its requests, its +bytes left, in hex), which the research check compares with h11 on every cut. `tests/check.py`'s `module_specs` feeds +each stream to aup's `examples/http.aup` whole, at random boundaries and (if it is short) a byte at a time, each packet +an event, and on Pure's three paths whole. -- cgit v1.2.3