Skip to content

Give proxies that advertise Connection: close longer to actually close#137

Merged
MDA2AV merged 1 commit into
mainfrom
fix/connection-close-window
Jul 11, 2026
Merged

Give proxies that advertise Connection: close longer to actually close#137
MDA2AV merged 1 commit into
mainfrom
fix/connection-close-window

Conversation

@MDA2AV

@MDA2AV MDA2AV commented Jul 11, 2026

Copy link
Copy Markdown
Owner

Problem

The probe checks whether the server closed the socket only ~50 ms after the response (single Task.Delay(50) + CheckConnectionState()). Envoy advertises Connection: close but, as a proxy, tears the socket down slightly later — so it was recorded as still Open and failed every close-expected test. Evidence: all 21 Envoy failures have connectionState=Open, 16 on tests where close is an accepted outcome, and Envoy is the only server of 43 that advertises close yet reads Open.

Fix

When the response carries Connection: close, poll up to ~400 ms (RawTcpClient.WaitForCloseAsync, returns early the moment it closes) instead of a single 50 ms snapshot. Keep-alive responses keep the brief check, so the common path stays fast and servers that genuinely ignore Connection: close (Workerman, Glyph11) still correctly read Open and fail.

This is an engine change, so it re-probes all servers — the comment should show Envoy's close-expected fails flipping to pass (confirming timing, not a real Envoy defect). If Envoy stays failed, it was genuine.

…ctually close

The close check polled the socket once ~50ms after the response. Envoy advertises Connection: close but (as a proxy, delayed_close_timeout defaults to ~1s) tears the socket down ~1s later, so it read as still-Open and failed close-expected tests. Now, when the response carries Connection: close, poll up to ~2s (RawTcpClient.WaitForCloseAsync, returns early once closed); keep-alive responses keep the brief 50ms check. Validated locally against Envoy: COMP-CONNECTION-CLOSE flips to pass (close now detected at ~1s), while genuine failures — where Envoy returns 200 keep-alive to malformed input and never advertises close — correctly stay failed.
@MDA2AV MDA2AV force-pushed the fix/connection-close-window branch from 64bb9a6 to faa0586 Compare July 11, 2026 16:01
@sonarqubecloud

Copy link
Copy Markdown

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

Copy link
Copy Markdown

Http11Probe — Compliance Comparison

Server Score
Effinitive 161/161 ████████████████████ 100%
FastPySGI 161/161 ████████████████████ 100%
Trillium 161/161 ████████████████████ 100%
Swerver 160/161 ████████████████████ 99%
Glyph11 154/161 ███████████████████░ 96%
Spring Boot 154/161 ███████████████████░ 96%
Node 152/161 ███████████████████░ 94%
Express 151/161 ███████████████████░ 94%
Jetty 150/161 ███████████████████░ 93%
Kestrel 147/161 ██████████████████░░ 91%
Deno 147/161 ██████████████████░░ 91%
FastEndpoints 147/161 ██████████████████░░ 91%
ServiceStack 147/161 ██████████████████░░ 91%
Uvicorn 147/161 ██████████████████░░ 91%
HAProxy 146/161 ██████████████████░░ 91%
Apache 144/161 ██████████████████░░ 89%
Envoy 142/161 ██████████████████░░ 88%
SimpleW 142/161 ██████████████████░░ 88%
Workerman 142/161 ██████████████████░░ 88%
Nginx 141/161 ██████████████████░░ 88%
Actix 139/161 █████████████████░░░ 86%
Gunicorn 139/161 █████████████████░░░ 86%
Ntex 137/161 █████████████████░░░ 85%
Bun 135/161 █████████████████░░░ 84%
GenHTTP 11 133/161 █████████████████░░░ 83%
Tomcat 133/161 █████████████████░░░ 83%
GenHTTP 132/161 ████████████████░░░░ 82%
FastHTTP 128/161 ████████████████░░░░ 80%
H2O 127/161 ████████████████░░░░ 79%
Sisk 125/161 ████████████████░░░░ 78%
Hyper 124/161 ███████████████░░░░░ 77%
Puma 119/161 ███████████████░░░░░ 74%
Caddy 115/161 ██████████████░░░░░░ 71%
Gin 113/161 ██████████████░░░░░░ 70%
PHP 112/161 ██████████████░░░░░░ 70%
Quarkus 112/161 ██████████████░░░░░░ 70%
Traefik 111/161 ██████████████░░░░░░ 69%
Flask 95/161 ████████████░░░░░░░░ 59%
Pingora 95/161 ████████████░░░░░░░░ 59%
Lighttpd 86/161 ███████████░░░░░░░░░ 53%
EmbedIO 79/161 ██████████░░░░░░░░░░ 49%
Horse 77/161 ██████████░░░░░░░░░░ 48%
NetCoreServer 74/161 █████████░░░░░░░░░░░ 46%

✅ 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 ⚠️200 ⚠️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 ⚠️200 ⚠️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 200 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 ⚠️200 ⚠️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 200 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 200 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 200 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 200 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 200 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 ⚠️200 ⚠️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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 ⚠️200 ⚠️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 ⚠️200 ⚠️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 200 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 ClosedByServer 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 200 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 ⚠️200 ⚠️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 200 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 ⚠️200 ⚠️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 200 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 200 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 200 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 ⚠️200 ⚠️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 ⚠️200 TimedOut ⚠️200 400 ⚠️200 501 ⚠️200 501 405 ⚠️200 404 ⚠️200 405 405 405 ⚠️200 501 400 400
405-ALLOW 405 + Allow header ⚠️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 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 405 ⚠️200 ⚠️404 ⚠️200 405 405 405 ⚠️200 405 ⚠️200 ⚠️200
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
NO-CL-IN-204 204 without CL, 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
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 200 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 200 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 200 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 ⚠️200 ⚠️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 ⚠️200 ⚠️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 200 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 200 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 ⚠️200 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 200 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 200 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 200 ⚠️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 200 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 ⚠️200 ⚠️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 ⚠️200 ⚠️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 200 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 200 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 200 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 200 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 200 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 200 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 ⚠️200 ⚠️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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 ⚠️200 ⚠️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 200 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 ⚠️200 ⚠️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 200 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 200 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 200 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 200 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 200 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 200 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 ⚠️200 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 ⚠️200 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 ⚠️200 ⚠️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 ⚠️200 ⚠️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 ⚠️200 ⚠️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 ⚠️200 ⚠️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 ⚠️200 ⚠️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 ⚠️200 ⚠️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 200 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 200 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 ⚠️200 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 ⚠️200 ⚠️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 ⚠️200 ⚠️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 ⚠️200 ⚠️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 200 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 200 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 ⚠️200 ⚠️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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 ⚠️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 200 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 ⚠️200 ⚠️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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 200 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 ⚠️200 ⚠️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 200 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 ⚠️200 ⚠️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 ⚠️200 ⚠️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 ⚠️200 ⚠️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 200 ⚠️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 200 ⚠️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 200 ⚠️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: 933362f

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