Skip to content

feat(grid): "LLM's Choice" ideal-proxy column + drop two inert tests - #143

Merged
MDA2AV merged 2 commits into
mainfrom
feat/grid-llm-choice-prune-inert
Jul 11, 2026
Merged

MDA2AV merged 2 commits into
mainfrom
feat/grid-llm-choice-prune-inert

Conversation

@MDA2AV

@MDA2AV MDA2AV commented Jul 11, 2026 •

Copy link
Copy Markdown
Owner

Two talk-prep grid changes.

1. "LLM's Choice" — ideal-proxy reference column

A synthetic column showing what I'd argue is ideal behaviour for a proxy, read off the whole fleet's results. Request smuggling is a proxy problem: a proxy forwards to a backend, so wherever the fleet disagrees on framing/routing, forwarding is a bet that the backend resolves it the same way — and that bet is the vulnerability. The doctrine:

  • Reject everything ambiguous/malformed (CL+TE, dup-CL, dup/malformed Host, TE/chunk obfuscation, bad URLs). Rejecting is already an accepted answer here, so it stays green — with a proxy rationale citing the live fleet split.
  • Reject odd-but-legal Content-Length spellings (leading zeros, 0200 octal-vs-decimal, OWS) — the exact parser-disagreement vectors between hops.
  • Refuse legal-but-risky features a proxy can't guarantee a backend re-frames identically — chunk extensions, trailers, header-name normalisation — even though the suite prefers 2xx.
  • Accept absolute-form (GET http://host/path) — the one place a proxy is more lenient than an origin, because that's the target clients send to a proxy.
  • Bound the request-target (414 on an unbounded URL).

It's not asserted all-green: each cell inherits the verdict a real server got for the same response, so the deliberate strict calls show honestly. Result: 154 Pass / 3 Warn / 2 Fail — the non-passes (refuse chunk extensions → Warn, trailers → Fail, unbounded URL → Fail) are the column's opinion, and the whole cost of a smuggling-proof proxy.

Mechanics: derived from the live fleet at page load (web/assets/llm-choice.js), appended to window.PROBE_DATA before grid.js runs — no edit to the generated data.js, stays in sync with every re-probe. Its own "Reference" tier; on by default on the Results matrix, off by default on Entropy (so it doesn't skew the density/family study), toggle-able via the framework dropdown.

2. Drop two inert tests

COMP-NO-CL-IN-204 and COMP-405-ALLOW check a response property (no CL in a 204; Allow on a 405) that a black-box echo harness can't force the server to produce — so ~38/43 servers only ever score Warn ("couldn't verify") and they add no divergence signal (and pollute the MUST-level Entropy view).

  • Removed from ComplianceSuite.cs (permanent — next probe drops them).
  • Also filtered in a grid.js EXCLUDE set so the site drops them immediately, without a re-probe. Grid now shows 213 tests / 159 scored.

Note: the ComplianceSuite.cs change is an engine change, so the probe workflow re-probes all servers on this PR and regenerates results without the two tests.

MDA2AV added 2 commits July 11, 2026 22:42
Talk-prep grid changes:

- New synthetic "LLM's Choice" column (web/assets/llm-choice.js), derived
  from the live fleet at page load and appended before grid.js reads it.
  One doctrine-driven pick per test (reject ambiguity, accept the
  well-formed, strict only where a byte can move a boundary/route), with
  the rationale and the live fleet split shown in each cell's response
  pane. Its own "Reference" tier in grid.js; wired into both grid pages in
  build.mjs. Self-updating: no edit to the generated data.js.

- Drop two inert tests a black-box echo harness can't elicit, so they only
  ever score Warn and add no signal: COMP-NO-CL-IN-204 (server never emits
  a 204) and COMP-405-ALLOW (never emits a 405). Removed from
  ComplianceSuite.cs; also filtered in a grid.js EXCLUDE set so the site
  drops them without waiting for a re-probe.
…t verdicts

Redefine the reference column from "strict, all-green" to ideal behaviour
for a proxy — the sharpest lens, since request smuggling is a proxy
problem. Doctrine read off the fleet: wherever servers disagree on
framing/routing, a proxy that forwards is betting the backend agrees, so
reject (400 + close); refuse legal-but-risky features it can't guarantee a
backend re-frames identically (chunk extensions, trailers, obs-fold, odd
Content-Length spellings, header-name normalisation); accept absolute-form
(the request-target sent TO a proxy); bound the request-target.

Verdicts are no longer asserted Pass — each cell inherits the verdict a
real server got for the same response, so the deliberate strict calls show
as honest Warn/Fail. Result: 154 Pass / 3 Warn / 2 Fail; the non-passes
(refuse chunk extensions, trailers, unbounded URLs) are the column's
opinion and the whole cost of a smuggling-proof proxy.
@MDA2AV MDA2AV changed the title feat(grid): "LLM's Choice" reference column + drop two inert tests feat(grid): "LLM's Choice" ideal-proxy column + drop two inert tests Jul 11, 2026
@sonarqubecloud

Copy link
Copy Markdown

@MDA2AV
MDA2AV merged commit d79d2d3 into main Jul 11, 2026
1 of 2 checks passed
@github-actions

Copy link
Copy Markdown

Http11Probe — Compliance Comparison

Server Score
Effinitive 159/159 ████████████████████ 100%
FastPySGI 159/159 ████████████████████ 100%
Trillium 159/159 ████████████████████ 100%
Swerver 158/159 ████████████████████ 99%
Glyph11 152/159 ███████████████████░ 96%
Spring Boot 152/159 ███████████████████░ 96%
Node 150/159 ███████████████████░ 94%
Express 149/159 ███████████████████░ 94%
Jetty 148/159 ███████████████████░ 93%
Kestrel 145/159 ██████████████████░░ 91%
Deno 145/159 ██████████████████░░ 91%
FastEndpoints 145/159 ██████████████████░░ 91%
ServiceStack 145/159 ██████████████████░░ 91%
Uvicorn 145/159 ██████████████████░░ 91%
HAProxy 144/159 ██████████████████░░ 91%
Apache 142/159 ██████████████████░░ 89%
Envoy 141/159 ██████████████████░░ 89%
Lighttpd 140/159 ██████████████████░░ 88%
SimpleW 140/159 ██████████████████░░ 88%
Workerman 140/159 ██████████████████░░ 88%
Nginx 139/159 █████████████████░░░ 87%
Actix 137/159 █████████████████░░░ 86%
Gunicorn 137/159 █████████████████░░░ 86%
Ntex 135/159 █████████████████░░░ 85%
Bun 133/159 █████████████████░░░ 84%
GenHTTP 11 132/159 █████████████████░░░ 83%
GenHTTP 131/159 ████████████████░░░░ 82%
Tomcat 131/159 ████████████████░░░░ 82%
FastHTTP 126/159 ████████████████░░░░ 79%
H2O 125/159 ████████████████░░░░ 79%
Sisk 123/159 ███████████████░░░░░ 77%
Hyper 122/159 ███████████████░░░░░ 77%
Puma 117/159 ███████████████░░░░░ 74%
Caddy 113/159 ██████████████░░░░░░ 71%
Gin 111/159 ██████████████░░░░░░ 70%
Quarkus 111/159 ██████████████░░░░░░ 70%
PHP 110/159 ██████████████░░░░░░ 69%
Traefik 109/159 ██████████████░░░░░░ 69%
Flask 93/159 ████████████░░░░░░░░ 58%
Pingora 93/159 ████████████░░░░░░░░ 58%
EmbedIO 77/159 ██████████░░░░░░░░░░ 48%
Horse 75/159 █████████░░░░░░░░░░░ 47%
NetCoreServer 72/159 █████████░░░░░░░░░░░ 45%

✅ Baseline Passed

Compliance

Test Expected Actix Apache Kestrel Bun Caddy Deno Effinitive EmbedIO Envoy Express FastEndpoints FastHTTP FastPySGI Flask GenHTTP GenHTTP 11 Gin Glyph11 Gunicorn H2O HAProxy Horse Hyper Jetty Lighttpd NetCoreServer Nginx Node Ntex PHP Pingora Puma Quarkus ServiceStack SimpleW Sisk Spring Boot Swerver Tomcat Traefik Trillium Uvicorn Workerman
BASELINE 2xx ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200
BARE-LF-REQUEST-LINE 400 or close (pass), 2xx (warn) ⚠️200 ✅400 ⚠️200 ❌505 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400
BARE-LF-HEADER 400 or close (pass), 2xx (warn) ⚠️200 ✅400 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400
OBS-FOLD 400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ❌ClosedByServer ❌200 ✅400 ✅400 ❌200 ✅400 ❌200 ❌200 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400
SP-BEFORE-COLON 400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
MULTI-SP-REQUEST-LINE 400 or 2xx; close/timeout = warn ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️ClosedByServer ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ❌505 ✅400 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️ClosedByServer ✅400 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ✅400
MISSING-HOST 400 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ❌ClosedByServer ✅400 ✅400 ✅400 ❌200 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ❌200 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ❌200 ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400
INVALID-VERSION 400/505, close, or timeout = warn ✅400 ❌200 ✅505 ✅505 ✅505 ✅400 ✅505 ❌200 ❌426 ✅400 ✅505 ❌200 ✅505 ⚠️ClosedByServer ✅400 ✅505 ✅505 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅505 ✅400 ❌200 ✅505 ✅400 ✅400 ❌200 ✅400 ❌200 ❌200 ✅505 ✅400 ✅505 ✅505 ✅400 ✅505 ✅505 ✅400 ✅400 ✅400
EMPTY-HEADER-NAME 400 or close ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CR-ONLY-LINE-ENDING 400, close, or timeout = warn ✅400 ✅400 ✅400 ❌505 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ❌505 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ❌500 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
MISSING-TARGET 400, close, or timeout = warn ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌404 ✅400 ❌505 ✅400 ❌200 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ⚠️ClosedByServer ✅400 ✅400 ✅400 ✅400
FRAGMENT-IN-TARGET 400 or 2xx; 404 = warn ⚠️200 ✅400 ⚠️404 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ✅400 ⚠️404 ⚠️404 ⚠️200 ✅400 ⚠️200 ⚠️404 ✅400 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ⚠️404 ⚠️200 ⚠️200 ⚠️404 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️404 ⚠️200 ⚠️ClosedByServer ⚠️404 ⚠️ClosedByServer ✅400 ✅400 ⚠️200 ⚠️TimedOut
HTTP09-REQUEST 400/close/timeout ✅400 ✅ClosedByServer ✅400 ❌505 ✅TimedOut ✅400 ✅400 ✅ClosedByServer ❌426 ✅TimedOut ✅400 ✅400 ✅TimedOut ✅TimedOut ✅400 ✅TimedOut ✅400 ✅TimedOut ✅400 ✅400 ✅400 ✅TimedOut ✅400 ❌505 ✅TimedOut ✅TimedOut ✅ClosedByServer ✅TimedOut ✅400 ✅TimedOut ✅400 ✅400 ✅400 ✅400 ✅TimedOut ✅400 ✅ClosedByServer ✅TimedOut ✅ClosedByServer ✅400 ✅TimedOut ✅TimedOut ✅TimedOut
INVALID-HEADER-NAME 400 or close ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
HEADER-NO-COLON 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅TimedOut ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
DUPLICATE-HOST 400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ❌200 ✅400 ❌200 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400
CL-NON-NUMERIC 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CL-PLUS-SIGN 400 or close ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ❌200 ✅400 ✅400 ❌200 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
WHITESPACE-BEFORE-HEADERS 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
DUPLICATE-HOST-SAME 400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ❌200 ✅400 ❌200 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ❌200 ❌200 ❌200 ✅400 ❌200 ❌200 ✅400 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400
HOST-WITH-USERINFO 400 or close ❌200 ✅400 ✅400 ❌200 ✅400 ❌200 ✅400 ❌200 ❌200 ❌200 ✅400 ❌200 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200
HOST-WITH-PATH 400 or close ❌200 ✅400 ✅400 ❌200 ✅400 ❌200 ✅400 ❌200 ✅400 ❌200 ✅400 ❌200 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ❌200 ❌200 ❌200 ❌200 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400
ASTERISK-WITH-GET 400, close, or timeout = warn ❌200 ✅400 ❌405 ✅400 ❌200 ✅400 ✅400 ⚠️ClosedByServer ✅400 ❌404 ❌405 ❌200 ✅400 ❌200 ❌200 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ❌200 ❌200 ❌200 ❌200 ❌200 ❌404 ❌405 ✅400 ✅400 ✅400 ✅400 ✅400 ❌404 ✅400 ❌200 ✅400
OPTIONS-STAR 2xx or 405; close/timeout = warn ✅200 ✅200 ✅405 ❌400 ✅200 ✅200 ✅204 ⚠️ClosedByServer ❌404 ❌404 ✅405 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌400 ✅200 ✅200 ✅200 ✅200 ✅200 ❌404 ✅200 ❌400 ❌400 ✅200 ✅200 ✅200 ✅200 ✅204 ✅200 ❌400
UNKNOWN-TE-501 400/501 or close ✅400 ✅400 ✅400 ✅400 ✅501 ✅400 ✅400 ❌200 ✅501 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅501 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅501 ❌TimedOut ✅501 ✅400 ✅400 ❌200 ❌200 ✅400 ❌200 ✅400 ❌200 ✅501 ✅501 ✅400 ✅501 ✅501 ✅400 ✅400 ✅400
LEADING-CRLF 400 or 2xx; close/timeout = warn ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ✅400 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ⚠️ClosedByServer ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ❌500 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400
ABSOLUTE-FORM 2xx preferred; 400/close/timeout = warn ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌404 ❌404 ✅200 ✅200 ✅200 ✅200 ✅200 ❌404 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ⚠️400 ✅200 ✅200 ✅200 ⚠️400 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ⚠️400
METHOD-CASE 400/405/501 or 2xx; close/timeout = warn ⚠️200 ⚠️200 ⚠️200 ⚠️ClosedByServer ⚠️200 ⚠️200 ✅501 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅501 ⚠️TimedOut ✅400 ✅400 ⚠️200 ⚠️ClosedByServer ⚠️200 ✅400 ✅405 ⚠️200 ❌404 ⚠️200 ✅405 ✅405 ✅405 ⚠️200 ✅501 ✅400 ✅400
POST-CL-BODY 2xx + echo ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200
POST-CL-ZERO 2xx or close ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌400 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200
POST-NO-CL-NO-TE 2xx or close ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌400 ❌400 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌411 ✅TimedOut ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌411 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200
POST-CL-UNDERSEND 400/close/timeout ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ❌200 ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut
CHUNKED-BODY 2xx + echo ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200
CHUNKED-MULTI 2xx + echo ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200
CHUNKED-EMPTY 2xx or close ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200
CHUNKED-NO-FINAL 400/close/timeout ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ❌200 ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ❌200 ❌200 ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut
METHOD-CONNECT 400/405/501 or close ❌TimedOut ❌200 ✅405 ❌200 ❌200 ❌200 ✅405 ✅ClosedByServer ❌404 ✅ClosedByServer ✅405 ❌200 ✅501 ❌200 ❌404 ✅400 ❌200 ✅400 ❌200 ✅405 ❌200 ❌404 ❌200 ❌200 ✅400 ❌TimedOut ✅400 ✅ClosedByServer ❌TimedOut ❌200 ✅400 ✅501 ❌404 ❌200 ✅400 ✅400 ✅501 ✅501 ✅501 ❌404 ✅405 ✅400 ✅400
EXPECT-UNKNOWN 417 or 2xx ⚠️200 ✅417 ⚠️200 ⚠️200 ✅417 ⚠️200 ✅417 ⚠️200 ⚠️200 ✅417 ⚠️200 ⚠️200 ✅417 ⚠️200 ⚠️200 ⚠️200 ✅417 ⚠️200 ✅417 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅ClosedByServer ⚠️200 ⚠️200 ⚠️200 ✅417 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅417 ✅417 ✅417 ✅417 ✅417 ⚠️200 ⚠️200
GET-WITH-CL-BODY 400 or 2xx ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200
CHUNKED-EXTENSION 2xx preferred; 400 warns ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌500 ⚠️400 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200
METHOD-TRACE 405/501 or 2xx ⚠️200 ⚠️200 ✅405 ⚠️200 ⚠️200 ⚠️200 ✅405 ⚠️200 ⚠️200 ❌404 ✅405 ⚠️200 ⚠️200 ⚠️200 ✅405 ✅405 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅405 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅405 ⚠️200 ❌404 ⚠️200 ✅405 ✅405 ✅405 ⚠️200 ✅405 ⚠️200 ❌400
HOST-EMPTY-VALUE 400 or close ❌200 ✅400 ❌200 ❌500 ✅400 ❌200 ✅400 ✅ClosedByServer ❌200 ❌200 ❌200 ❌200 ✅400 ❌200 ❌200 ✅400 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ❌200 ❌200 ✅400 ❌200 ✅400
REQUEST-LINE-TAB 400 or 2xx; close/timeout = warn ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ⚠️ClosedByServer ⚠️200 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ❌404 ✅400 ✅400 ❌501 ⚠️TimedOut ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400
VERSION-MISSING-MINOR 400, close, or timeout = warn ✅400 ✅400 ✅400 ❌505 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ❌505 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ❌505 ✅400 ❌200 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌505 ✅400 ❌505 ✅400 ✅400 ✅400 ✅400
VERSION-LEADING-ZEROS 400, close, or timeout = warn ✅400 ✅400 ✅400 ❌505 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ❌505 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ❌505 ✅400 ❌200 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ❌505 ✅400 ❌505 ✅400 ✅400 ✅400 ✅400
VERSION-WHITESPACE 400, close, or timeout = warn ✅400 ✅400 ✅400 ❌505 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ❌505 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CONNECTION-CLOSE 2xx + close ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200
HTTP10-DEFAULT-CLOSE 2xx + close ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ⚠️200 ❌426 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ⚠️200
HTTP10-NO-HOST 200 or 400 ⚠️200 ⚠️200 ⚠️200 ❌500 ⚠️200 ⚠️200 ✅400 ⚠️200 ❌426 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200
HTTP12-VERSION 200 or 505 ❌400 ⚠️200 ⚠️505 ⚠️505 ⚠️200 ❌400 ✅ClosedByServer ⚠️200 ❌426 ❌400 ⚠️505 ⚠️200 ⚠️505 ⚠️200 ❌400 ⚠️505 ⚠️200 ❌400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ❌400 ⚠️505 ❌400 ⚠️200 ⚠️200 ❌400 ❌400 ⚠️200 ❌400 ⚠️200 ⚠️200 ⚠️505 ⚠️200 ⚠️200 ⚠️505 ❌400 ⚠️505 ⚠️200 ⚠️200 ❌400 ⚠️200
TRACE-WITH-BODY 400/405 or 200 ⚠️200 ❌413 ✅405 ⚠️200 ⚠️200 ⚠️200 ✅405 ⚠️200 ⚠️200 ❌404 ✅405 ⚠️200 ⚠️200 ⚠️200 ✅405 ✅405 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅405 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅405 ⚠️200 ❌404 ⚠️200 ✅405 ✅405 ✅405 ⚠️200 ✅405 ⚠️200 ✅400
CHUNKED-TRAILER-VALID 2xx + echo ❌400 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌500 ❌200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ❌400 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200
CHUNKED-HEX-UPPERCASE 2xx + echo ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200
RANGE-POST 2xx (Range ignored) ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200
HEAD-NO-BODY 2xx with no body ✅200 ✅200 ❌405 ✅200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ❌405 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200 ❌200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200
UNKNOWN-METHOD 501/405/400 or close ⚠️200 ⚠️200 ✅405 ✅ClosedByServer ⚠️200 ⚠️200 ✅405 ⚠️200 ✅400 ✅400 ✅405 ⚠️200 ✅400 ⚠️200 ✅405 ✅405 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅501 ❌TimedOut ⚠️200 ✅400 ⚠️200 ✅501 ⚠️200 ✅501 ✅405 ⚠️200 ❌404 ⚠️200 ✅405 ✅405 ✅405 ⚠️200 ✅501 ✅400 ✅400
DATE-HEADER 2xx with Date header ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ❌200 ❌200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200 ❌200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200
DATE-FORMAT IMF-fixdate format ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ⚠️200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ✅200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ⚠️200
NO-1XX-HTTP10 non-1xx response ❌100 ✅200 ✅200 ❌100 ✅200 ❌100 ✅200 ❌100 ✅426 ✅200 ✅200 ❌100 ✅417 ❌100 ✅200 ✅200 ✅200 ✅200 ✅200 ❌100 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌100 ✅200 ✅200 ❌100 ❌100 ✅200 ✅200 ❌100 ✅200 ✅200 ✅200 ❌100 ✅200 ❌100 ✅200
OPTIONS-ALLOW 2xx with Allow header, or 405 ⚠️200 ⚠️200 ✅405 ⚠️200 ⚠️200 ⚠️200 ✅204 ⚠️200 ⚠️200 ✅200 ✅405 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅200 ⚠️200 ✅200 ⚠️200 ✅200 ✅405 ✅200 ⚠️200 ✅204 ⚠️200 ⚠️200
CONTENT-TYPE 2xx with Content-Type ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ⚠️200 ✅200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ⚠️200 ✅200 ✅200
VERSION-CASE 400, close, or timeout = warn ✅400 ✅400 ❌505 ❌505 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ✅400 ❌505 ✅400 ✅400 ⚠️ClosedByServer ❌200 ❌505 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ❌200 ✅400 ❌200 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ✅400 ❌200 ❌505 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
LONG-URL-OK not 414; close/timeout = warn ✅200 ✅403 ✅404 ✅200 ✅200 ✅200 ✅404 ✅200 ✅200 ✅404 ✅404 ✅431 ✅200 ✅200 ✅404 ✅404 ✅200 ✅200 ✅400 ✅200 ✅200 ✅404 ✅200 ✅200 ✅404 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌414 ✅200 ✅404 ✅200 ✅404 ✅404 ✅200 ✅200 ✅404 ✅200 ⚠️TimedOut
SPACE-IN-TARGET 400, close, or timeout = warn ✅400 ✅400 ✅400 ❌505 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌505 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️ClosedByServer ✅400 ✅400 ❌404 ❌200 ✅400 ✅400 ✅400 ⚠️ClosedByServer ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
DUPLICATE-CT 400 or 2xx ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200
TRACE-SENSITIVE 405/501, or 200 without Auth ✅200 ⚠️200 ✅405 ✅200 ✅200 ✅200 ✅405 ✅200 ✅200 ❌404 ✅405 ✅200 ✅200 ✅200 ✅405 ✅405 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅405 ✅200 ✅200 ✅200 ✅200 ✅200 ✅405 ✅200 ❌404 ✅200 ✅405 ✅405 ✅405 ✅200 ✅405 ✅200 ❌400
RANGE-INVALID 200 or 416 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅416 ✅416 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅416 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200
ACCEPT-NONSENSE 406 or 2xx ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅406 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅406 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200
POST-UNSUPPORTED-CT 415 or 2xx ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200

Smuggling

Test Expected Actix Apache Kestrel Bun Caddy Deno Effinitive EmbedIO Envoy Express FastEndpoints FastHTTP FastPySGI Flask GenHTTP GenHTTP 11 Gin Glyph11 Gunicorn H2O HAProxy Horse Hyper Jetty Lighttpd NetCoreServer Nginx Node Ntex PHP Pingora Puma Quarkus ServiceStack SimpleW Sisk Spring Boot Swerver Tomcat Traefik Trillium Uvicorn Workerman
CL-TE-BOTH 400 or 2xx ✅400 ⚠️200 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400
DUPLICATE-CL 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CL-LEADING-ZEROS 400 or 2xx ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200
TE-XCHUNKED 400/501 or close ✅400 ✅400 ✅400 ✅400 ✅501 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅501 ✅400 ✅501 ✅400 ✅400 ❌200 ✅400 ✅400 ✅501 ❌200 ✅501 ✅400 ✅400 ❌200 ❌200 ✅501 ❌200 ✅400 ✅400 ✅501 ✅501 ✅400 ✅501 ✅501 ✅400 ✅400 ✅400
TE-TRAILING-SPACE 400/501 or 2xx+close ✅400 ❌TimedOut ✅400 ✅400 ❌TimedOut ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌TimedOut ✅400 ✅400 ❌TimedOut ✅400 ✅400 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌500 ❌TimedOut ❌TimedOut ✅400 ✅400 ✅400 ✅400 ✅400 ❌500 ❌TimedOut ✅400 ✅400 ✅400
TE-SP-BEFORE-COLON 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CL-NEGATIVE 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CLTE-PIPELINE 400 or close preferred; 2xx acceptable ✅400 ✅200 ✅200 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅200 ⚠️200 ✅400 ✅200 ✅400 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ✅200 ❌TimedOut ⚠️200 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅200 ⚠️200 ⚠️200 ⚠️200 ✅200 ✅400 ⚠️200 ✅200 ✅400 ✅200 ⚠️200 ✅400 ✅400 ✅400
TECL-PIPELINE 400 or close preferred; 2xx acceptable ✅400 ✅200 ✅200 ✅400 ⚠️200 ✅400 ✅400 ❌TimedOut ✅400 ✅400 ✅200 ⚠️200 ✅400 ✅200 ✅400 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ✅200 ❌TimedOut ⚠️200 ✅400 ✅400 ❌TimedOut ✅400 ✅400 ✅400 ✅200 ⚠️200 ⚠️200 ⚠️200 ✅200 ✅400 ⚠️200 ✅200 ✅400 ✅200 ⚠️200 ✅400 ✅400 ✅400
CL-TRAILING-SPACE 400 or 2xx ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200
TE-DOUBLE-CHUNKED 400 or 2xx ✅400 ❌TimedOut ✅400 ✅400 ❌501 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌TimedOut ✅400 ✅400 ❌501 ✅400 ✅400 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ❌501 ⚠️200 ❌501 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ❌TimedOut ✅400 ✅400 ❌501 ✅400 ✅400 ✅400 ❌501 ✅400 ✅400 ✅400
CL-EXTRA-LEADING-SP 400 or 2xx ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200
TE-CASE-MISMATCH 400 or 2xx ✅400 ❌TimedOut ✅400 ✅400 ❌TimedOut ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌TimedOut ✅400 ✅400 ❌TimedOut ✅400 ✅400 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌500 ❌TimedOut ❌TimedOut ✅400 ✅400 ✅400 ✅400 ✅400 ❌500 ❌TimedOut ✅400 ✅400 ✅400
CL-COMMA-DIFFERENT 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
TE-NOT-FINAL-CHUNKED 400 or close ✅400 ✅400 ✅400 ✅400 ❌501 ✅400 ✅400 ❌200 ❌501 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ❌501 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ❌501 ❌200 ❌501 ✅400 ✅400 ✅ClosedByServer ❌200 ✅400 ❌200 ✅400 ❌200 ❌501 ✅400 ✅400 ✅400 ❌501 ✅400 ✅400 ✅400
TE-HTTP10 400 or close ✅400 ✅TimedOut ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅TimedOut ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅ClosedByServer ❌500 ✅TimedOut ✅TimedOut ✅400 ✅400 ❌200 ✅400 ✅400 ❌500 ❌200 ✅400 ✅400 ✅400
CHUNK-BARE-SEMICOLON 400 or close ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ✅400 ❌200 ❌200 ✅400 ❌200 ❌200 ✅400 ❌500 ✅400 ❌500 ❌200 ✅400 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ✅400 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ✅400 ❌500 ❌200 ✅400 ✅400 ❌200
CHUNK-EXT-INVALID-TOKEN 400 or close ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ✅400 ❌200 ❌200 ✅400 ❌200 ❌200 ✅400 ❌500 ✅400 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ✅400 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ✅400 ❌500 ❌200 ✅400 ✅400 ❌200
BARE-CR-HEADER-VALUE 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200
CL-OCTAL 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CHUNK-UNDERSCORE 400 or close ✅400 ✅400 ✅400 ✅400 ❌200 ✅ClosedByServer ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ❌500 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌500 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ❌500 ❌500 ✅400 ✅400 ✅400
TE-EMPTY-VALUE 400 or close ✅400 ✅400 ✅400 ❌200 ❌501 ✅400 ✅400 ❌200 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ❌501 ✅400 ❌501 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅TimedOut ❌501 ❌200 ✅400 ❌200 ❌200 ❌501 ❌200 ✅400 ❌200 ❌501 ✅400 ✅400 ✅400 ❌501 ✅400 ❌200 ✅400
TE-LEADING-COMMA 400 or 2xx ✅400 ❌TimedOut ✅400 ✅400 ❌501 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌TimedOut ✅400 ✅400 ❌501 ✅400 ❌501 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ❌501 ⚠️200 ❌501 ✅400 ✅400 ⚠️200 ⚠️200 ❌501 ❌TimedOut ✅400 ✅400 ❌501 ✅400 ✅400 ❌500 ❌501 ✅400 ✅400 ✅400
TE-DUPLICATE-HEADERS 400 or close ✅400 ✅400 ✅400 ✅400 ❌501 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅TimedOut ✅400 ✅400 ❌501 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ❌501 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌500 ✅400 ✅TimedOut ✅400 ✅400 ❌501 ✅400 ✅400 ✅400 ❌501 ✅400 ✅400 ✅400
CHUNK-HEX-PREFIX 400 or close ✅400 ✅400 ✅400 ✅400 ❌200 ✅ClosedByServer ✅400 ❌200 ✅400 ✅400 ✅400 ✅TimedOut ✅400 ❌200 ❌200 ❌500 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌500 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ❌500 ❌500 ✅400 ✅400 ✅400
CHUNK-SIZE-PLUS 400 or close ✅400 ✅400 ✅400 ✅400 ❌200 ✅ClosedByServer ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ❌500 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌500 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ❌500 ❌500 ✅400 ✅400 ✅400
CHUNK-SIZE-TRAILING-OWS 400 or close ❌200 ❌200 ✅400 ✅400 ❌200 ❌200 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ❌200 ❌200 ❌500 ❌200 ✅400 ✅400 ❌200 ❌200 ❌200 ❌200 ✅400 ❌200 ❌200 ❌200 ✅400 ❌200 ❌200 ❌200 ❌200 ❌200 ✅400 ❌200 ❌200 ✅400 ✅400 ❌500 ❌200 ✅400 ✅400 ✅400
CL-HEX-PREFIX 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CL-INTERNAL-SPACE 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CHUNK-LEADING-SP 400 or close ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ❌500 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌500 ❌200 ❌200 ✅400 ❌200 ✅400 ✅400 ✅400 ❌500 ❌500 ✅400 ✅400 ✅400
CHUNK-MISSING-TRAILING-CRLF 400 or close ✅400 ✅400 ✅400 ✅400 ❌200 ✅ClosedByServer ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌500 ✅400 ❌500 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ❌200 ✅400 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌500 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ❌500 ❌500 ✅400 ✅400 ✅400
CHUNK-EXT-LF 400 or 2xx ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅ClosedByServer ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ✅400 ❌500 ✅400 ❌500 ⚠️200 ✅400 ❌TimedOut ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ❌TimedOut ❌TimedOut ❌TimedOut ⚠️200 ✅400 ❌TimedOut ❌TimedOut ✅400 ✅400 ❌500 ⚠️200 ✅400 ✅400 ❌TimedOut
CHUNK-SPILL 400 or close ✅400 ✅400 ✅400 ✅400 ❌200 ✅ClosedByServer ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ❌500 ✅400 ❌500 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌500 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌500 ❌500 ✅400 ✅400 ✅400
CHUNK-LF-TERM 400 or 2xx ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅ClosedByServer ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ❌500 ⚠️200 ✅400 ✅400 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅ClosedByServer ❌500 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌500 ❌500 ✅400 ✅400 ✅400
CHUNK-EXT-CTRL 400 or close ✅400 ✅400 ❌200 ✅400 ❌200 ✅ClosedByServer ✅400 ❌200 ❌200 ✅400 ❌200 ❌200 ✅400 ❌500 ✅400 ❌500 ❌200 ✅400 ❌200 ❌200 ❌200 ❌200 ❌200 ✅400 ✅TimedOut ❌200 ❌200 ✅400 ✅400 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ✅400 ❌500 ❌200 ✅400 ✅400 ❌200
CHUNK-EXT-CR 400 or close ✅400 ✅400 ✅400 ✅400 ❌200 ✅ClosedByServer ✅TimedOut ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌500 ✅400 ❌500 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌500 ❌200 ❌200 ✅400 ❌200 ✅400 ✅400 ✅400 ❌500 ❌200 ✅400 ✅400 ❌200
TE-VTAB 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅TimedOut ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌501 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
TE-FORMFEED 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅TimedOut ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌501 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
TE-NULL 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CHUNK-LF-TRAILER 400 or 2xx ✅400 ✅400 ❌TimedOut ⚠️200 ❌TimedOut ❌TimedOut ✅400 ⚠️200 ⚠️200 ✅400 ❌TimedOut ⚠️200 ✅400 ⚠️200 ❌500 ❌500 ❌TimedOut ✅400 ❌TimedOut ⚠️200 ⚠️200 ⚠️200 ❌TimedOut ⚠️200 ❌TimedOut ❌TimedOut ⚠️200 ✅400 ✅400 ⚠️200 ❌500 ❌TimedOut ⚠️200 ❌TimedOut ❌TimedOut ❌TimedOut ✅400 ✅400 ❌500 ❌TimedOut ⚠️200 ✅400 ❌TimedOut
TE-IDENTITY 400/501 or close ✅400 ✅400 ✅400 ✅400 ✅501 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ❌200 ✅400 ✅400 ✅501 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅501 ❌200 ✅501 ✅400 ❌200 ❌200 ❌200 ✅501 ❌200 ✅400 ❌200 ✅501 ✅501 ✅400 ✅501 ✅501 ✅400 ✅400 ✅400
CHUNK-NEGATIVE 400 or close ✅400 ✅400 ✅400 ✅400 ❌200 ✅ClosedByServer ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌500 ✅400 ❌500 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌500 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ❌500 ❌500 ✅400 ✅400 ✅400
TRANSFER_ENCODING 400 or 2xx ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200
CL-COMMA-SAME 400 or 2xx ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CL-COMMA-TRIPLE 400 or 2xx ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CHUNKED-WITH-PARAMS 400 or 2xx ✅400 ✅400 ✅400 ✅400 ❌501 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ❌501 ✅400 ❌501 ✅400 ✅400 ⚠️200 ✅400 ✅400 ❌501 ⚠️200 ❌501 ✅400 ✅400 ⚠️200 ⚠️200 ❌501 ⚠️200 ✅400 ✅400 ❌501 ✅400 ✅400 ✅400 ❌501 ✅400 ✅400 ✅400
EXPECT-100-CL 100, 400 or 2xx ⚠️100 ⚠️100 ⚠️200 ⚠️100 ⚠️100 ⚠️100 ⚠️200 ⚠️100 ⚠️100 ⚠️100 ⚠️200 ⚠️100 ⚠️100 ⚠️100 ⚠️200 ⚠️200 ⚠️100 ⚠️200 ⚠️100 ⚠️100 ⚠️200 ⚠️200 ⚠️100 ⚠️200 ⚠️200 ⚠️200 ⚠️100 ⚠️100 ⚠️100 ⚠️200 ⚠️200 ⚠️100 ⚠️100 ⚠️200 ⚠️200 ⚠️100 ⚠️100 ⚠️200 ⚠️100 ⚠️100 ⚠️100 ⚠️100 ⚠️200
TRAILER-CL 400 or 2xx ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ❌500 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200
TRAILER-TE 400 or 2xx ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ❌500 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200
TRAILER-HOST 400 or 2xx ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ❌500 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200
TRAILER-AUTH 400 or 2xx ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ❌500 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200
HEAD-CL-BODY 400 or 2xx ⚠️200 ⚠️200 ❌405 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ❌405 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200
OPTIONS-CL-BODY 400/405 or 2xx ⚠️200 ⚠️200 ✅405 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ✅405 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅405 ⚠️200 ⚠️200 ⚠️204 ⚠️200 ⚠️200
CL-UNDERSCORE 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CL-NEGATIVE-ZERO 400 or close ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ❌200 ✅400 ✅400 ❌200 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CL-DOUBLE-ZERO 400 or 2xx ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200
CL-LEADING-ZEROS-OCTAL 400 or 2xx ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200
TE-OBS-FOLD 400 or 2xx+close ✅400 ❌TimedOut ✅400 ✅400 ❌TimedOut ✅400 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ❌TimedOut ✅400 ✅400 ❌TimedOut ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ❌TimedOut ✅400 ✅400 ✅400 ✅400 ✅400 ❌500 ❌TimedOut ✅400 ✅400 ✅400
TE-TRAILING-COMMA 400 or 2xx ✅400 ✅400 ✅400 ✅400 ❌501 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌TimedOut ✅400 ✅400 ❌501 ✅400 ❌501 ✅400 ✅400 ⚠️200 ✅400 ✅400 ❌501 ⚠️200 ❌501 ✅400 ✅400 ⚠️200 ⚠️200 ❌TimedOut ❌TimedOut ✅400 ✅400 ❌501 ✅400 ✅400 ❌500 ❌501 ✅400 ✅400 ✅400
TE-TAB-BEFORE-VALUE 400 or 2xx ✅400 ❌TimedOut ✅400 ✅400 ❌TimedOut ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌TimedOut ✅400 ✅400 ❌TimedOut ✅400 ✅400 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ❌501 ✅400 ✅400 ⚠️200 ❌500 ❌TimedOut ❌TimedOut ✅400 ✅400 ✅400 ✅400 ✅400 ❌500 ❌TimedOut ✅400 ✅400 ✅400
ABSOLUTE-URI-HOST-MISMATCH 400 or 2xx ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ❌404 ❌404 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ❌404 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ✅400 ⚠️200 ✅400 ⚠️200 ✅400 ⚠️200 ✅400
MULTIPLE-HOST-COMMA 400 or close ❌200 ✅400 ✅400 ❌500 ✅400 ❌500 ✅400 ❌200 ✅400 ❌200 ✅400 ❌200 ✅400 ❌200 ❌200 ❌200 ✅400 ❌200 ❌200 ❌200 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ❌200 ❌200 ❌200 ❌200 ❌200 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400
CHUNK-BARE-CR-TERM 400 or close ✅400 ✅400 ✅400 ✅400 ❌200 ✅ClosedByServer ✅TimedOut ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌500 ✅400 ❌500 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌500 ✅400 ✅TimedOut ✅400 ✅400 ✅400 ✅400 ✅400 ❌500 ❌500 ✅400 ✅400 ✅400
TRAILER-CONTENT-TYPE 400 or 2xx ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ❌500 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200
CLTE-CONN-CLOSE 400, or 2xx + close ✅400 ✅200 ✅200 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅200 ❌200 ✅400 ✅200 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅200 ✅200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅200 ❌200 ❌200 ❌200 ✅200 ✅400 ❌200 ✅200 ✅400 ✅200 ❌200 ✅400 ✅400 ✅400
TECL-CONN-CLOSE 400, or 2xx + close ✅400 ✅200 ✅200 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅200 ❌200 ✅400 ✅200 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅200 ✅200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅200 ❌200 ❌200 ❌200 ✅200 ✅400 ❌200 ✅200 ✅400 ✅200 ❌200 ✅400 ✅400 ✅400
CLTE-DESYNC 400, or close ✅400 ✅200 ✅200 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅200 ❌200 ✅400 ✅200 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅200 ✅200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅200 ❌200 ❌501 ❌405 ✅200 ✅400 ✅400 ✅200 ✅400 ✅200 ❌200 ✅400 ✅400 ✅400
CLTE-SMUGGLED-GET 400, or close (no extra response) ✅400 ✅200 ✅200 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅200 ❌200 ✅400 ✅200 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅200 ✅200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌200 ❌200 ❌200 ✅200 ✅400 ✅400 ✅200 ✅400 ✅200 ❌200 ✅400 ✅400 ✅400
CLTE-SMUGGLED-GET-CL-PLUS 400, or close (no extra response) ✅400 ✅400 ✅200 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅200 ✅400 ✅400 ✅200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ❌200 ❌200 ✅400 ✅200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CLTE-SMUGGLED-GET-CL-NON-NUMERIC 400, or close (no extra response) ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CLTE-SMUGGLED-GET-TE-OBS-FOLD 400, or close (no extra response) ✅400 ✅200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ✅200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅200 ✅200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅200 ✅400 ✅200 ❌200 ✅400 ✅400 ✅400
CLTE-SMUGGLED-HEAD 400, or close (no extra response) ✅400 ✅200 ✅200 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅200 ❌200 ✅400 ✅200 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅200 ✅200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌200 ❌200 ❌200 ✅200 ✅400 ✅400 ✅200 ✅400 ✅200 ❌200 ✅400 ✅400 ✅400
CLTE-SMUGGLED-GET-TE-TRAILING-SPACE 400, or close (no extra response) ✅400 ✅200 ✅200 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅200 ❌200 ✅400 ✅200 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅200 ✅200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌200 ❌200 ❌200 ✅200 ✅400 ✅400 ✅200 ✅400 ✅200 ❌200 ✅400 ✅400 ✅400
CLTE-SMUGGLED-GET-TE-LEADING-COMMA 400, or close (no extra response) ✅400 ✅200 ✅200 ✅400 ✅501 ✅400 ✅400 ❌200 ✅400 ✅400 ✅200 ✅400 ✅400 ✅200 ✅400 ✅400 ✅501 ✅400 ✅501 ✅400 ✅400 ✅200 ❌200 ✅400 ✅501 ❌200 ✅501 ✅400 ✅400 ✅200 ❌200 ✅501 ❌200 ✅200 ✅400 ❌501 ✅200 ✅400 ✅200 ✅501 ✅400 ✅400 ✅400
CLTE-SMUGGLED-GET-TE-CASE-MISMATCH 400, or close (no extra response) ✅400 ✅200 ✅200 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅200 ❌200 ✅400 ✅200 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅200 ✅200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌200 ❌200 ❌200 ✅200 ✅400 ✅400 ✅200 ✅400 ✅200 ❌200 ✅400 ✅400 ✅400
TE-DUPLICATE-HEADERS-SMUGGLED-GET 400, or close (no extra response) ✅400 ✅400 ✅400 ✅400 ✅501 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅200 ✅400 ✅400 ✅501 ✅400 ✅400 ✅400 ✅400 ✅200 ✅400 ✅400 ✅501 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌200 ✅400 ❌200 ✅400 ✅400 ❌501 ✅400 ✅400 ✅400 ✅501 ✅400 ✅400 ✅400
TECL-SMUGGLED-GET 400, or close (no extra response) ✅400 ✅200 ✅200 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅200 ❌200 ✅400 ✅200 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅200 ❌TimedOut ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅200 ❌200 ❌200 ❌200 ✅200 ✅400 ❌200 ✅200 ✅400 ✅200 ❌200 ✅400 ✅400 ✅400
DUPLICATE-CL-SMUGGLED-GET 400, or close (no extra response) ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
GET-CL-PREFIX-DESYNC 400/close preferred; extra response on step 2 = warn ✅200 ✅200 ✅200 ✅400 ✅400 ✅200 ✅400 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅400 ⚠️200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅400 ✅200 ✅200 ⚠️200 ✅200 ✅200 ✅400 ✅200 ✅400 ✅200 ✅200 ✅400
TECL-DESYNC 400, or close ✅400 ✅200 ✅200 ✅400 ❌200 ✅400 ✅400 ❌TimedOut ✅400 ✅400 ✅200 ❌200 ✅400 ✅200 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅200 ❌TimedOut ❌200 ✅400 ✅400 ❌TimedOut ✅400 ✅400 ✅400 ✅200 ❌200 ❌501 ❌405 ✅200 ✅400 ✅400 ✅200 ✅400 ✅200 ❌200 ✅400 ✅400 ✅400
CL0-BODY-POISON 400/close preferred; poisoned follow-up = warn ⚠️200 ⚠️200 ⚠️405 ⚠️200 ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ✅400 ⚠️405 ⚠️200 ✅200 ✅200 ✅400 ❌TimedOut ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ⚠️501 ⚠️200 ⚠️200 ✅400 ⚠️200 ✅200 ⚠️200 ⚠️501 ⚠️405 ⚠️200 ⚠️404 ⚠️200 ⚠️405 ⚠️405 ⚠️405 ⚠️200 ⚠️501 ✅400 ⚠️400
GET-CL-BODY-DESYNC 400/close/pass-through; poisoned follow-up = warn ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅400 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅400 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200
OPTIONS-CL-BODY-DESYNC 400/close/pass-through; poisoned follow-up = warn ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅400 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200
EXPECT-100-CL-DESYNC 417/400/close preferred; poisoned follow-up = warn ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ✅100 ✅200 ✅200 ⚠️200 ✅200 ✅100 ⚠️200 ✅200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅200
OPTIONS-TE-OBS-FOLD 400, or 2xx + close ✅400 ❌TimedOut ✅400 ✅400 ❌TimedOut ✅400 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ✅200 ✅400 ✅400 ❌TimedOut ✅400 ✅400 ✅400 ✅400 ✅200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅200 ✅400 ✅200 ❌TimedOut ✅400 ✅400 ✅400
CHUNK-INVALID-SIZE-DESYNC 400, or close ✅400 ✅400 ✅400 ✅400 ✅200 ✅ClosedByServer ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅200 ✅400 ✅500 ✅200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ✅400 ✅400 ❌TimedOut ✅400 ✅400 ✅400 ✅ClosedByServer ✅500 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ✅500 ✅500 ✅400 ✅400 ✅400
PIPELINE-SAFE 2xx + 2xx ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅200 ⚠️200 ✅200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200

Malformed Input

Test Expected Actix Apache Kestrel Bun Caddy Deno Effinitive EmbedIO Envoy Express FastEndpoints FastHTTP FastPySGI Flask GenHTTP GenHTTP 11 Gin Glyph11 Gunicorn H2O HAProxy Horse Hyper Jetty Lighttpd NetCoreServer Nginx Node Ntex PHP Pingora Puma Quarkus ServiceStack SimpleW Sisk Spring Boot Swerver Tomcat Traefik Trillium Uvicorn Workerman
BINARY-GARBAGE 400/close/timeout ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ✅400 ✅TimedOut ✅400 ✅TimedOut ✅TimedOut ✅400 ✅400 ✅TimedOut ✅400 ✅400 ✅TimedOut ✅TimedOut ✅400 ✅400 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅TimedOut ✅400 ✅TimedOut
LONG-URL 400/414/431 or close ✅400 ✅414 ✅414 ✅431 ❌200 ✅400 ✅414 ❌200 ✅431 ✅431 ✅414 ✅431 ✅414 ✅414 ✅400 ✅431 ❌200 ✅431 ✅400 ❌200 ✅400 ❌404 ✅414 ✅414 ✅431 ❌200 ✅414 ✅431 ✅400 ✅ClosedByServer ❌200 ✅400 ✅414 ✅414 ✅431 ❌200 ✅400 ✅431 ✅400 ❌200 ✅ClosedByServer ✅400 ✅431
LONG-HEADER-VALUE 400/431 or close ❌200 ✅400 ✅431 ✅431 ❌200 ✅400 ✅431 ✅ClosedByServer ✅431 ✅431 ✅431 ✅431 ✅431 ✅431 ✅400 ✅431 ❌200 ✅431 ✅431 ❌200 ✅400 ❌200 ❌200 ✅431 ✅431 ❌200 ✅400 ✅431 ✅400 ✅ClosedByServer ❌200 ✅400 ✅431 ✅431 ✅431 ✅400 ✅400 ✅431 ✅400 ❌200 ✅ClosedByServer ❌200 ✅431
MANY-HEADERS 400/431 or close ✅431 ✅400 ✅431 ✅431 ❌200 ✅400 ✅431 ✅ClosedByServer ✅431 ✅431 ✅431 ✅431 ✅431 ✅431 ❌200 ✅431 ❌200 ✅431 ✅431 ✅400 ✅400 ❌200 ✅431 ✅431 ✅431 ❌200 ✅400 ✅431 ✅400 ✅ClosedByServer ✅400 ✅400 ✅431 ✅431 ✅431 ✅400 ✅400 ✅431 ✅400 ❌200 ✅ClosedByServer ❌200 ✅431
NUL-IN-URL 400 or close ✅400 ✅400 ✅400 ❌505 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ❌200 ❌404 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ❌404 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CONTROL-CHARS-HEADER 400 or close ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200
INCOMPLETE-REQUEST 400/close/timeout ❌408 ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅400 ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ❌408 ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut
EMPTY-REQUEST 400/close/timeout ❌408 ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ❌408 ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut
LONG-HEADER-NAME 400/431 or close ✅ClosedByServer ✅400 ✅431 ✅431 ❌200 ✅400 ✅431 ✅ClosedByServer ✅431 ✅431 ✅431 ✅431 ✅431 ✅431 ❌200 ✅431 ❌200 ✅431 ✅431 ❌200 ✅400 ❌200 ✅431 ✅431 ✅431 ❌200 ✅400 ✅431 ✅400 ✅ClosedByServer ✅400 ✅400 ✅431 ✅431 ✅431 ✅400 ✅400 ✅431 ✅400 ❌200 ✅ClosedByServer ❌200 ✅431
LONG-METHOD 400 or close ❌200 ❌414 ❌414 ❌431 ❌405 ✅400 ✅400 ❌200 ❌431 ✅400 ❌414 ❌431 ✅400 ❌414 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ❌200 ❌200 ❌431 ❌431 ❌TimedOut ❌414 ✅400 ✅400 ✅ClosedByServer ❌200 ✅400 ❌414 ❌414 ❌431 ❌200 ✅400 ✅400 ✅400 ❌200 ✅ClosedByServer ✅400 ❌431
NON-ASCII-HEADER-NAME 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
NON-ASCII-URL 400 or close ✅400 ❌404 ✅400 ❌200 ❌200 ❌200 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ❌200 ❌404 ✅400 ❌200 ✅400 ❌200 ❌200 ✅400 ❌404 ❌200 ✅400 ❌404 ❌200 ❌200 ✅400 ❌200 ✅ClosedByServer ❌200 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅TimedOut
CL-OVERFLOW 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅TimedOut ✅400 ✅400 ✅400 ✅400 ✅TimedOut ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅TimedOut ✅400 ✅400 ✅400 ✅TimedOut ❌200 ✅TimedOut ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌413
WHITESPACE-ONLY-LINE 400/close/timeout ✅400 ✅400 ✅400 ✅400 ✅TimedOut ✅400 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅TimedOut ✅400 ✅400 ✅400 ✅ClosedByServer ✅400 ✅400 ✅TimedOut ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
NUL-IN-HEADER-VALUE 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200
CHUNK-SIZE-OVERFLOW 400 or close ✅400 ❌413 ❌500 ✅400 ❌200 ✅ClosedByServer ✅400 ❌200 ✅400 ✅400 ❌500 ✅400 ✅400 ✅TimedOut ✅400 ❌500 ❌200 ✅400 ✅TimedOut ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅ClosedByServer ❌500 ❌500 ✅ClosedByServer ❌500 ✅400 ✅400 ✅400 ✅400 ❌500 ❌500 ✅400 ✅400 ✅400
H2-PREFACE 400/505/close/timeout ✅400 ✅400 ✅ClosedByServer ✅400 ✅ClosedByServer ✅TimedOut ✅505 ✅ClosedByServer ✅TimedOut ✅400 ✅ClosedByServer ❌200 ✅400 ✅ClosedByServer ✅400 ✅505 ❌200 ✅400 ✅400 ✅TimedOut ✅TimedOut ❌200 ✅ClosedByServer ❌426 ✅TimedOut ❌200 ✅400 ✅400 ✅400 ❌Error ✅400 ❌501 ✅TimedOut ✅ClosedByServer ✅400 ✅505 ✅ClosedByServer ✅TimedOut ✅ClosedByServer ✅ClosedByServer ✅TimedOut ✅400 ✅400
CL-EMPTY 400 or close ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅TimedOut ✅400 ✅400 ✅400 ❌Error ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CL-TAB-BEFORE-VALUE 400 or 2xx ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ❌Error ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200
URL-BACKSLASH 400 or 2xx/404 ⚠️200 ⚠️404 ⚠️404 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️404 ⚠️404 ⚠️200 ✅400 ⚠️200 ⚠️404 ✅400 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️404 ⚠️200 ✅400 ⚠️404 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ❌Error ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️404 ⚠️200 ✅400 ⚠️404 ✅400 ⚠️200 ✅400 ⚠️200 ❌TimedOut
URL-OVERLONG-UTF8 400 or close ✅400 ❌404 ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ❌200 ❌404 ✅400 ❌200 ✅400 ❌200 ❌200 ✅400 ❌404 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ❌Error ✅400 ❌200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅TimedOut
URL-PERCENT-NULL 400 or 2xx/404 ⚠️200 ⚠️404 ✅400 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️404 ✅400 ⚠️200 ✅400 ⚠️200 ⚠️404 ✅400 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️404 ⚠️200 ✅400 ✅400 ⚠️200 ✅400 ⚠️200 ⚠️200 ❌Error ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️404 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ⚠️404 ⚠️200 ❌TimedOut
URL-PERCENT-CRLF 400 or 2xx/404 ⚠️200 ⚠️404 ⚠️404 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️404 ⚠️404 ⚠️200 ✅400 ⚠️404 ⚠️404 ⚠️404 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️404 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ❌Error ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️404 ⚠️200 ⚠️404 ⚠️404 ⚠️200 ⚠️200 ⚠️404 ⚠️200 ❌TimedOut
CHUNK-EXT-64K 400 or 2xx ⚠️200 ❌413 ⚠️200 ⚠️200 ⚠️200 ❌500 ⚠️200 ⚠️200 ⚠️200 ❌413 ⚠️200 ⚠️200 ⚠️200 ❌500 ✅400 ❌500 ⚠️200 ❌TimedOut ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ❌413 ⚠️200 ❌Error ❌500 ✅400 ✅ClosedByServer ⚠️200 ⚠️200 ✅400 ✅400 ❌413 ❌500 ❌500 ✅400 ⚠️200 ⚠️200
RANGE-OVERLAPPING 200/206/400/416 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅ClosedByServer ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️416 ⚠️416 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️206 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ❌Error ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200
POST-CL-HUGE-NO-BODY 400/413/close/timeout ✅413 ✅TimedOut ✅413 ✅413 ✅TimedOut ✅TimedOut ✅ClosedByServer ✅TimedOut ✅TimedOut ✅TimedOut ✅413 ✅400 ✅400 ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ❌200 ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅413 ✅TimedOut ✅400 ❌Error ✅TimedOut ✅TimedOut ✅413 ✅413 ✅413 ✅TimedOut ✅TimedOut ✅413 ✅TimedOut ✅TimedOut ✅400 ✅TimedOut ✅413

Header Normalization

Test Expected Actix Apache Kestrel Bun Caddy Deno Effinitive EmbedIO Envoy Express FastEndpoints FastHTTP FastPySGI Flask GenHTTP GenHTTP 11 Gin Glyph11 Gunicorn H2O HAProxy Horse Hyper Jetty Lighttpd NetCoreServer Nginx Node Ntex PHP Pingora Puma Quarkus ServiceStack SimpleW Sisk Spring Boot Swerver Tomcat Traefik Trillium Uvicorn Workerman
UNDERSCORE-CL Reject/drop (pass), normalize (fail), preserve (warn) ⚠️200 ✅200 ⚠️200 ⚠️200 ✅405 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅200 ❌200 ✅200 ⚠️200 ⚠️200 ⚠️200 ❌200 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌Error ⚠️200 ✅200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅200
SP-BEFORE-COLON-CL Reject/drop (pass), normalize (fail), preserve (warn) ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌Error ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
TAB-IN-NAME Reject/drop (pass), normalize (fail), preserve (warn) ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅200 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌Error ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400
CASE-TE Reject/drop (pass), normalize casing (fail), preserve (warn) ✅400 ❌TimedOut ❌200 ✅400 ❌TimedOut ✅400 ✅400 ⚠️200 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ✅400 ❌TimedOut ✅400 ✅400 ✅400 ✅400 ⚠️200 ❌200 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌Error ❌200 ❌TimedOut ⚠️200 ❌200 ✅400 ⚠️200 ❌200 ✅400 ⚠️200 ❌TimedOut ✅400 ✅400 ✅400
UNDERSCORE-TE Reject/drop (pass), normalize (fail), preserve (warn) ⚠️200 ✅200 ⚠️200 ⚠️200 ✅405 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅200 ❌200 ✅200 ⚠️200 ⚠️200 ⚠️200 ❌200 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌Error ⚠️200 ✅200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅200

Commit: bdd3d53

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant