Skip to content

Adding 9 new tests - 8 Compliance, 1 Smuggling - #55

Merged
MDA2AV merged 1 commit into
mainfrom
tests/adding-new-tests
Feb 14, 2026
Merged

MDA2AV merged 1 commit into
mainfrom
tests/adding-new-tests

Conversation

@MDA2AV

@MDA2AV MDA2AV commented Feb 14, 2026 •

Copy link
Copy Markdown
Owner

@mohammed90
9 new RFC 9110 compliance tests sourced from mohammed90/http-compliance-testing:
9 + - COMP-HEAD-NO-BODY — HEAD response must not contain a message body (RFC 9110 §9.3.2, MUST)
10 + - COMP-UNKNOWN-METHOD — unrecognized method should be rejected with 501/405 (RFC 9110 §9.1, SHOULD)
11 + - COMP-405-ALLOW — 405 response must include Allow header (RFC 9110 §15.5.6, MUST)
12 + - COMP-DATE-HEADER — origin server must include Date header in responses (RFC 9110 §6.6.1, MUST)
13 + - COMP-NO-1XX-HTTP10 — server must not send 1xx to HTTP/1.0 client (RFC 9110 §15.2, MUST NOT)
14 + - COMP-NO-CL-IN-204 — Content-Length forbidden in 204 responses (RFC 9110 §8.6, MUST NOT)
15 + - SMUG-CL-COMMA-TRIPLE — three comma-separated identical CL values (RFC 9110 §8.6, unscored)
16 + - COMP-OPTIONS-ALLOW — OPTIONS response should include Allow header (RFC 9110 §9.3.7, SHOULD)
17 + - COMP-CONTENT-TYPE — response with content should include Content-Type (RFC 9110 §8.3, SHOULD)

@github-actions

Copy link
Copy Markdown

Http11Probe — Compliance Comparison

Server Score
Glyph11 115/135 █████████████████░░░ 85%
Spring Boot 112/135 █████████████████░░░ 83%
Express 108/135 ████████████████░░░░ 80%
Node 108/135 ████████████████░░░░ 80%
Apache 107/135 ████████████████░░░░ 79%
Jetty 105/135 ████████████████░░░░ 78%
Kestrel 102/135 ███████████████░░░░░ 76%
Uvicorn 102/135 ███████████████░░░░░ 76%
HAProxy 98/135 ███████████████░░░░░ 73%
ServiceStack 98/135 ███████████████░░░░░ 73%
Ntex 94/135 ██████████████░░░░░░ 70%
Tomcat 93/135 ██████████████░░░░░░ 69%
Bun 92/135 ██████████████░░░░░░ 68%
Nginx 92/135 ██████████████░░░░░░ 68%
Actix 91/135 █████████████░░░░░░░ 67%
H2O 90/135 █████████████░░░░░░░ 67%
Puma 89/135 █████████████░░░░░░░ 66%
FastHTTP 88/135 █████████████░░░░░░░ 65%
Gunicorn 86/135 █████████████░░░░░░░ 64%
Envoy 84/135 ████████████░░░░░░░░ 62%
Deno 81/135 ████████████░░░░░░░░ 60%
Sisk 81/135 ████████████░░░░░░░░ 60%
Caddy 78/135 ████████████░░░░░░░░ 58%
Hyper 78/135 ████████████░░░░░░░░ 58%
Quarkus 78/135 ████████████░░░░░░░░ 58%
SimpleW 78/135 ████████████░░░░░░░░ 58%
Traefik 78/135 ████████████░░░░░░░░ 58%
Gin 76/135 ███████████░░░░░░░░░ 56%
Watson 75/135 ███████████░░░░░░░░░ 56%
PHP 71/135 ███████████░░░░░░░░░ 53%
Pingora 56/135 ████████░░░░░░░░░░░░ 41%
GenHTTP 52/135 ████████░░░░░░░░░░░░ 39%
Flask 45/135 ███████░░░░░░░░░░░░░ 33%
EmbedIO 43/135 ██████░░░░░░░░░░░░░░ 32%
NetCoreServer 38/135 ██████░░░░░░░░░░░░░░ 28%
Lighttpd 34/135 █████░░░░░░░░░░░░░░░ 25%

Compliance

Server BASELINE BARE-LF-REQUEST-LINE BARE-LF-HEADER OBS-FOLD SP-BEFORE-COLON MULTI-SP-REQUEST-LINE MISSING-HOST INVALID-VERSION EMPTY-HEADER-NAME CR-ONLY-LINE-ENDING MISSING-TARGET FRAGMENT-IN-TARGET HTTP09-REQUEST INVALID-HEADER-NAME HEADER-NO-COLON DUPLICATE-HOST CL-NON-NUMERIC CL-PLUS-SIGN WHITESPACE-BEFORE-HEADERS DUPLICATE-HOST-SAME HOST-WITH-USERINFO HOST-WITH-PATH ASTERISK-WITH-GET OPTIONS-STAR UNKNOWN-TE-501 LEADING-CRLF ABSOLUTE-FORM METHOD-CASE POST-CL-BODY POST-CL-ZERO POST-NO-CL-NO-TE POST-CL-UNDERSEND CHUNKED-BODY CHUNKED-MULTI CHUNKED-EMPTY CHUNKED-NO-FINAL UPGRADE-POST UPGRADE-MISSING-CONN UPGRADE-UNKNOWN METHOD-CONNECT EXPECT-UNKNOWN GET-WITH-CL-BODY CHUNKED-EXTENSION UPGRADE-INVALID-VER METHOD-TRACE HOST-EMPTY-VALUE REQUEST-LINE-TAB VERSION-MISSING-MINOR VERSION-LEADING-ZEROS VERSION-WHITESPACE CONNECTION-CLOSE HTTP10-DEFAULT-CLOSE HTTP10-NO-HOST HTTP12-VERSION TRACE-WITH-BODY CHUNKED-TRAILER-VALID CHUNKED-HEX-UPPERCASE HEAD-NO-BODY UNKNOWN-METHOD 405-ALLOW DATE-HEADER NO-1XX-HTTP10 NO-CL-IN-204 OPTIONS-ALLOW CONTENT-TYPE
Expected 2xx 400 or close (pass), 2xx (warn) 400 or close (pass), 2xx (warn) 400 400 400 or 2xx 400 400/505 or close 400 or close 400 400 or close 400 or 2xx 400/close/timeout 400 or close 400 or close 400 400 or close 400 or close 400 or close 400 400 or close 400 or close 400 or close 2xx 400/501 or close 400 or 2xx 2xx preferred; 400 warns 400/405/501 or 2xx 2xx 2xx or close 2xx or close 400/close/timeout 2xx 2xx 2xx or close 400/close/timeout !101 !101 !101 400/405/501 or close 417 or 2xx 400 or 2xx 2xx preferred; 400 warns non-101 (426 preferred) 405/501 or 2xx 400 or close 400 or 2xx 400 or close 400 or close 400 or close 2xx + close 2xx + close 200 or 400 200 or 505 400/405 or 200 2xx 2xx 2xx with no body 501/405/400 or close 405 + Allow header 2xx with Date header non-1xx response 204 without CL 2xx with Allow header 2xx with Content-Type
Actix ✅200 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ❌200 ❌200 ✅200 ✅400 ⚠️200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ❌TimedOut ❌TimedOut ✅200 ❌TimedOut ⚠️200 ⚠️200 ✅200 ❌TimedOut ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ❌400 ⚠️200 ❌400 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ❌100 ⚠️200 ⚠️200 ✅200
Apache ✅200 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅200 ✅400 ⚠️200 ✅200 ✅501 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅405 ✅417 ⚠️200 ✅200 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ⚠️200 ❌413 ✅200 ✅200 ✅200 ✅501 ✅405 ✅200 ✅200 ⚠️200 ✅200 ⚠️200
Kestrel ✅200 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅505 ✅400 ✅400 ✅400 ❌404 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ❌405 ✅200 ✅400 ⚠️200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅405 ⚠️200 ⚠️200 ✅200 ⚠️200 ✅405 ❌200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ⚠️505 ✅405 ✅200 ✅200 ✅200 ✅405 ✅405 ✅200 ✅200 ⚠️200 ✅200 ✅200
Bun ✅200 ❌505 ✅400 ✅400 ✅400 ✅400 ✅400 ✅505 ❌200 ❌505 ✅400 ⚠️200 ✅505 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ❌200 ✅400 ❌400 ✅400 ✅400 ✅200 ✅ClosedByServer ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ❌200 ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌500 ⚠️200 ❌505 ❌505 ❌505 ✅200 ✅200 ❌500 ⚠️505 ⚠️200 ✅200 ✅200 ✅200 ✅ClosedByServer ⚠️200 ✅200 ❌100 ⚠️200 ⚠️200 ✅200
Caddy ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅505 ✅400 ✅400 ✅400 ⚠️200 ✅TimedOut ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅200 ✅501 ✅400 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ❌200 ✅417 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200 ✅200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200
Deno ✅200 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ❌200 ✅400 ✅200 ✅400 ⚠️200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ❌200 ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌500 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ❌400 ⚠️200 ✅200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200
EmbedIO ✅200 ⚠️200 ⚠️200 ❌ClosedByServer ❌200 ✅ClosedByServer ❌ClosedByServer ❌200 ✅ClosedByServer ❌ClosedByServer ✅ClosedByServer ⚠️200 ✅ClosedByServer ❌200 ✅ClosedByServer ❌200 ❌200 ❌200 ✅ClosedByServer ❌200 ❌200 ❌200 ✅ClosedByServer ❌ClosedByServer ❌200 ⚠️200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ✅ClosedByServer ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ✅ClosedByServer ✅ClosedByServer ✅ClosedByServer ✅ClosedByServer ✅ClosedByServer ❌200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅200 ✅200 ❌200 ⚠️200 ⚠️200 ✅200 ❌100 ⚠️200 ⚠️200 ✅200
Envoy ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ⚠️200 ✅400 ❌426 ✅400 ✅400 ✅400 ✅400 ❌426 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ❌404 ✅501 ✅400 ✅200 ✅400 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ❌200 ✅403 ✅200 ✅403 ❌404 ⚠️200 ⚠️200 ✅200 ✅403 ⚠️200 ❌200 ⚠️200 ✅400 ✅400 ✅400 ❌200 ❌426 ❌426 ❌426 ⚠️200 ✅200 ✅200 ✅200 ✅400 ⚠️200 ✅200 ✅426 ⚠️200 ⚠️200 ✅200
Express ✅200 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌404 ✅TimedOut ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ❌200 ❌404 ❌404 ✅400 ⚠️200 ✅200 ✅400 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅ClosedByServer ✅417 ⚠️200 ✅200 ⚠️200 ❌404 ❌200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ❌400 ❌404 ✅200 ✅200 ✅200 ✅400 ⚠️404 ✅200 ✅200 ⚠️200 ✅200 ✅200
FastHTTP ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ⚠️200 ❌200 ❌200 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅TimedOut ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ❌200 ❌200 ✅200 ✅400 ⚠️200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ❌200 ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200 ✅200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ❌100 ⚠️200 ⚠️200 ✅200
Flask ✅200 ⚠️200 ⚠️200 ❌200 ❌200 ⚠️200 ❌200 ✅ClosedByServer ❌200 ❌ClosedByServer ✅ClosedByServer ⚠️200 ✅TimedOut ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ✅200 ❌200 ✅ClosedByServer ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅400 ✅200 ✅200 ❌200 ⚠️200 ⚠️200 ❌500 ✅400 ⚠️200 ❌200 ⚠️200 ✅ClosedByServer ❌200 ✅ClosedByServer ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200 ❌500 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ❌100 ⚠️200 ⚠️200 ✅200
GenHTTP ✅200 ✅400 ⚠️200 ❌200 ❌200 ⚠️200 ✅400 ✅400 ❌200 ✅400 ✅400 ❌404 ✅400 ❌200 ❌200 ❌200 ✅400 ❌200 ✅400 ❌200 ❌200 ❌200 ❌200 ❌405 ❌200 ✅400 ❌404 ⚠️200 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ❌404 ⚠️200 ⚠️200 ❌500 ⚠️200 ✅405 ❌200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ✅400 ❌400 ✅405 ✅200 ✅200 ✅200 ✅405 ❌405 ✅200 ✅200 ⚠️405 ❌405 ✅200
Gin ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅505 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅200 ✅501 ✅400 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ❌200 ✅417 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200 ✅200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200
Glyph11 ✅200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅TimedOut ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅200 ✅400 ✅400 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅400 ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅400 ❌200 ⚠️200 ✅400 ❌400 ⚠️200 ✅200 ✅200 ❌200 ⚠️200 ⚠️200 ❌200 ✅200 ⚠️200 ⚠️200 ✅200
Gunicorn ✅200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ❌200 ❌200 ✅200 ❌200 ✅400 ✅200 ✅400 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ✅200 ❌200 ✅417 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200 ✅200 ✅200 ❌200 ⚠️200 ⚠️200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200
H2O ✅200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ❌200 ❌200 ✅200 ✅400 ✅400 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅405 ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200 ✅200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ❌100 ⚠️200 ⚠️200 ✅200
HAProxy ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ⚠️200 ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅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 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200 ✅200 ✅200 ✅200 ⚠️200 ⚠️200 ❌200 ✅200 ⚠️200 ⚠️200 ✅200
Hyper ✅200 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ❌200 ❌200 ✅200 ✅400 ⚠️200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ❌200 ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ❌400 ⚠️200 ✅200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200
Jetty ✅200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ✅400 ✅505 ✅400 ✅400 ❌505 ⚠️200 ✅505 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅200 ✅400 ⚠️200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅400 ✅200 ❌200 ✅ClosedByServer ⚠️200 ✅200 ⚠️200 ⚠️200 ✅400 ✅400 ❌505 ❌505 ✅400 ✅200 ✅200 ⚠️200 ⚠️505 ⚠️200 ✅200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200
Lighttpd ✅200 ⚠️200 ⚠️200 ❌200 ❌200 ⚠️200 ❌200 ❌200 ❌200 ❌200 ❌200 ⚠️200 ✅TimedOut ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ✅200 ❌200 ⚠️200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ❌200 ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌200 ⚠️200 ❌200 ❌200 ❌200 ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200 ✅200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200
NetCoreServer ✅200 ⚠️200 ⚠️200 ❌200 ❌200 ⚠️200 ❌200 ❌200 ✅400 ✅400 ❌200 ⚠️200 ✅TimedOut ❌200 ❌200 ❌200 ✅400 ✅400 ❌200 ❌200 ❌200 ❌200 ❌200 ✅200 ❌TimedOut ⚠️200 ✅200 ❌TimedOut ✅200 ✅200 ✅TimedOut ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ❌TimedOut ✅200 ✅200 ❌TimedOut ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌200 ❌TimedOut ❌200 ❌200 ❌200 ❌200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅200 ✅200 ❌200 ❌TimedOut ⚠️200 ❌200 ✅200 ⚠️200 ⚠️200 ⚠️200
Nginx ✅200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ✅400 ✅505 ✅400 ✅400 ✅400 ⚠️200 ✅ClosedByServer ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ❌400 ✅501 ⚠️200 ✅200 ✅400 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ❌200 ✅200 ✅200 ✅200 ✅400 ⚠️200 ⚠️200 ✅200 ⚠️200 ✅405 ✅400 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ⚠️200 ✅405 ✅200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200
Node ✅200 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅TimedOut ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ❌200 ❌200 ✅200 ✅400 ⚠️200 ✅200 ✅400 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅ClosedByServer ✅417 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ❌400 ⚠️200 ✅200 ✅200 ✅200 ✅400 ⚠️200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200
Ntex ✅200 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ❌200 ❌200 ✅200 ✅400 ⚠️200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ❌TimedOut ❌TimedOut ❌TimedOut ❌TimedOut ⚠️200 ⚠️200 ✅200 ❌TimedOut ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ❌400 ⚠️200 ❌400 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ❌100 ⚠️200 ⚠️200 ✅200
PHP ✅200 ⚠️200 ⚠️200 ❌200 ❌200 ⚠️200 ❌200 ❌200 ✅ClosedByServer ❌ClosedByServer ✅ClosedByServer ⚠️200 ✅TimedOut ✅ClosedByServer ❌200 ❌200 ✅ClosedByServer ✅ClosedByServer ❌200 ❌200 ❌200 ❌200 ❌200 ✅200 ❌200 ⚠️200 ✅200 ✅ClosedByServer ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ❌200 ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌200 ✅ClosedByServer ✅ClosedByServer ✅ClosedByServer ✅ClosedByServer ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200 ✅200 ✅200 ✅200 ✅501 ⚠️200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200
Pingora ✅200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌200 ❌200 ❌200 ✅400 ❌200 ❌200 ❌200 ❌200 ✅200 ❌200 ⚠️200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ❌TimedOut ✅200 ✅200 ❌200 ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ❌400 ⚠️200 ✅200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200
Puma ✅200 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ❌500 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ❌200 ❌200 ✅200 ✅400 ❌500 ✅200 ✅400 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅501 ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ✅400 ❌200 ✅400 ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200 ✅200 ✅200 ✅200 ✅501 ⚠️200 ❌200 ❌100 ⚠️200 ⚠️200 ✅200
Quarkus ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ⚠️200 ✅400 ❌200 ❌200 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ❌404 ❌404 ❌200 ⚠️200 ✅200 ✅405 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ❌404 ⚠️200 ⚠️200 ✅200 ⚠️200 ✅405 ❌200 ⚠️200 ✅400 ❌200 ✅400 ✅200 ✅200 ⚠️200 ⚠️200 ✅405 ✅200 ✅200 ✅200 ✅405 ❌405 ❌200 ❌100 ⚠️200 ✅200 ✅200
ServiceStack ✅200 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅505 ✅400 ✅400 ✅400 ⚠️200 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ❌405 ✅200 ✅400 ⚠️200 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ❌200 ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ⚠️505 ⚠️200 ✅200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200
SimpleW ✅200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌404 ✅TimedOut ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ❌400 ❌200 ✅400 ⚠️400 ❌404 ✅200 ✅200 ✅200 ✅TimedOut ❌TimedOut ❌TimedOut ✅TimedOut ✅TimedOut ✅200 ✅200 ✅200 ✅400 ⚠️200 ⚠️200 ❌TimedOut ⚠️200 ❌404 ❌200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ❌400 ❌404 ✅200 ❌TimedOut ❌404 ❌404 ⚠️404 ❌200 ✅200 ⚠️404 ❌404 ✅200
Sisk ✅200 ⚠️200 ⚠️200 ✅400 ❌200 ✅400 ✅400 ✅505 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌200 ✅400 ❌200 ✅400 ❌200 ❌200 ❌200 ✅400 ❌400 ✅501 ⚠️200 ✅200 ⚠️200 ✅200 ✅200 ❌411 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅411 ✅200 ✅200 ✅400 ⚠️200 ⚠️200 ✅200 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200 ✅200 ✅200 ❌200 ⚠️200 ⚠️200 ✅200 ❌100 ⚠️200 ⚠️200 ✅200
Spring Boot ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ⚠️200 ✅400 ✅505 ✅400 ✅400 ✅ClosedByServer ✅ClosedByServer ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅200 ✅501 ⚠️200 ✅200 ✅405 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅501 ✅417 ⚠️200 ✅200 ⚠️200 ✅405 ❌200 ⚠️200 ❌505 ❌505 ✅400 ✅200 ✅200 ⚠️200 ⚠️505 ✅405 ✅200 ✅200 ✅200 ✅405 ✅405 ✅200 ✅200 ⚠️200 ✅200 ✅200
Tomcat ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ⚠️200 ✅400 ✅505 ✅400 ✅400 ✅ClosedByServer ✅ClosedByServer ✅ClosedByServer ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅200 ✅501 ⚠️200 ✅200 ✅405 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅501 ✅417 ⚠️200 ✅200 ⚠️200 ✅405 ❌200 ⚠️200 ❌505 ❌505 ✅400 ✅200 ✅200 ⚠️200 ⚠️505 ✅405 ✅200 ✅200 ✅200 ✅405 ✅405 ✅200 ✅200 ⚠️200 ✅200 ✅200
Traefik ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅505 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌404 ✅200 ✅501 ✅400 ✅200 ⚠️200 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ❌404 ✅417 ⚠️200 ✅200 ⚠️200 ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200 ✅200 ✅200 ✅200 ⚠️200 ⚠️200 ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200
Uvicorn ✅200 ✅400 ✅400 ✅400 ✅400 ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅TimedOut ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ❌200 ❌200 ❌200 ✅200 ✅400 ⚠️200 ✅200 ✅400 ✅200 ✅200 ✅200 ✅TimedOut ✅200 ✅200 ✅200 ✅TimedOut ✅400 ✅200 ✅200 ✅400 ⚠️200 ⚠️200 ✅200 ✅400 ⚠️200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ❌400 ⚠️200 ✅200 ✅200 ✅200 ✅400 ⚠️200 ✅200 ❌100 ⚠️200 ⚠️200 ✅200
Watson ✅200 ⚠️200 ⚠️200 ✅400 ❌200 ✅400 ✅400 ✅505 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌200 ✅400 ❌200 ✅400 ❌200 ❌200 ❌200 ✅400 ❌400 ✅501 ⚠️200 ✅200 ⚠️200 ✅200 ✅200 ❌411 ✅TimedOut ❌TimedOut ❌TimedOut ✅TimedOut ✅TimedOut ✅411 ❌TimedOut ❌TimedOut ✅400 ❌TimedOut ❌TimedOut ❌TimedOut ❌TimedOut ❌TimedOut ✅400 ✅400 ✅400 ✅400 ✅400 ❌TimedOut ❌TimedOut ❌TimedOut ❌TimedOut ❌TimedOut ❌TimedOut ❌TimedOut ❌TimedOut ❌TimedOut ❌TimedOut ❌TimedOut ❌100 ❌TimedOut ❌TimedOut ❌TimedOut

Smuggling

Server CL-TE-BOTH DUPLICATE-CL CL-LEADING-ZEROS TE-XCHUNKED TE-TRAILING-SPACE TE-SP-BEFORE-COLON CL-NEGATIVE CLTE-PIPELINE TECL-PIPELINE CL-TRAILING-SPACE TE-DOUBLE-CHUNKED CL-EXTRA-LEADING-SP TE-CASE-MISMATCH CL-COMMA-DIFFERENT TE-NOT-FINAL-CHUNKED TE-HTTP10 CHUNK-BARE-SEMICOLON BARE-CR-HEADER-VALUE CL-OCTAL CHUNK-UNDERSCORE TE-EMPTY-VALUE TE-LEADING-COMMA TE-DUPLICATE-HEADERS CHUNK-HEX-PREFIX CL-HEX-PREFIX CL-INTERNAL-SPACE CHUNK-LEADING-SP CHUNK-MISSING-TRAILING-CRLF CHUNK-EXT-LF CHUNK-SPILL CHUNK-LF-TERM CHUNK-EXT-CTRL CHUNK-EXT-CR TE-VTAB TE-FORMFEED TE-NULL CHUNK-LF-TRAILER TE-IDENTITY CHUNK-NEGATIVE TRANSFER_ENCODING CL-COMMA-SAME CL-COMMA-TRIPLE CHUNKED-WITH-PARAMS EXPECT-100-CL TRAILER-CL TRAILER-TE TRAILER-HOST TRAILER-AUTH HEAD-CL-BODY OPTIONS-CL-BODY CL-UNDERSCORE CL-NEGATIVE-ZERO CL-DOUBLE-ZERO CL-LEADING-ZEROS-OCTAL TE-OBS-FOLD TE-TRAILING-COMMA TE-TAB-BEFORE-VALUE ABSOLUTE-URI-HOST-MISMATCH MULTIPLE-HOST-COMMA CHUNK-BARE-CR-TERM TRAILER-CONTENT-TYPE
Expected 400 or 2xx 400 or close 400 or 2xx 400/501 or close 400/501 or 2xx+close 400 or close 400 or close 400 or close 400 or close 400 or 2xx 400 or 2xx 400 or 2xx 400 or 2xx 400 or close 400 or close 400 or close 400 or close 400 or close 400 or close 400 or close 400 or close 400 or 2xx 400 or close 400 or close 400 or close 400 or close 400 or close 400 or close 400 or 2xx 400 or close 400 or 2xx 400 or close 400 or close 400 or close 400 or close 400 or close 400 or 2xx 400/501 or close 400 or close 400 or 2xx 400 or 2xx 400 or 2xx 400 or 2xx 400 or 2xx 400 or 2xx 400 or 2xx 400 or 2xx 400 or 2xx 400 or 2xx 400 or 2xx 400 or close 400 or close 400 or 2xx 400 or 2xx 400 or 2xx+close 400 or 2xx 400 or 2xx 400 or 2xx 400 or close 400 or close 400 or 2xx
Actix ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌100 ✅400 ✅400 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ❌200 ✅400 ✅400
Apache ⚠️200 ✅400 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌100 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200
Kestrel ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ❌TimedOut ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ❌200 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200
Bun ✅400 ❌200 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌100 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ❌500 ✅400 ⚠️200
Caddy ⚠️200 ✅400 ⚠️200 ✅501 ❌TimedOut ✅400 ✅400 ❌200 ❌200 ⚠️200 ❌501 ⚠️200 ❌TimedOut ✅400 ❌501 ❌200 ❌200 ✅400 ✅400 ❌200 ❌501 ❌501 ❌501 ❌200 ✅400 ✅400 ❌200 ❌200 ⚠️200 ❌200 ⚠️200 ❌200 ❌200 ✅400 ✅400 ✅400 ❌TimedOut ✅501 ❌200 ⚠️200 ✅400 ✅400 ❌501 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ❌TimedOut ❌501 ❌TimedOut ⚠️200 ✅400 ❌200 ⚠️200
Deno ⚠️200 ✅400 ⚠️200 ✅400 ❌500 ✅400 ✅400 ❌200 ❌200 ⚠️200 ❌500 ⚠️200 ❌500 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ❌500 ✅400 ❌500 ✅400 ❌500 ✅400 ✅400 ❌500 ❌500 ❌500 ❌500 ❌500 ❌200 ❌500 ✅400 ✅400 ✅400 ❌TimedOut ✅400 ❌500 ⚠️200 ✅400 ✅400 ✅400 ❌100 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ❌500 ⚠️200 ❌500 ❌500 ⚠️200
EmbedIO ❌TimedOut ❌200 ⚠️200 ❌200 ❌200 ❌200 ✅ClosedByServer ❌200 ❌TimedOut ⚠️200 ⚠️200 ⚠️200 ⚠️200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ⚠️200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ⚠️200 ❌200 ⚠️200 ❌200 ❌200 ❌200 ❌200 ❌200 ⚠️200 ❌200 ❌200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ❌100 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ❌200 ❌200 ⚠️200 ⚠️200 ✅ClosedByServer ⚠️200 ⚠️200 ⚠️200 ❌200 ❌200 ⚠️200
Envoy ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ❌501 ✅400 ❌200 ❌200 ✅400 ❌200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ❌200 ⚠️200 ❌200 ⚠️200 ❌200 ❌200 ✅400 ✅400 ✅400 ⚠️200 ✅400 ❌200 ⚠️200 ✅400 ✅400 ✅400 ❌100 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ✅400 ❌200 ⚠️200
Express ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌100 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ❌200 ✅400 ⚠️200
FastHTTP ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅TimedOut ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ⚠️200 ❌200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌100 ✅400 ✅400 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ❌200 ✅400 ⚠️200
Flask ⚠️200 ❌200 ⚠️200 ❌200 ❌TimedOut ❌200 ❌200 ❌200 ❌200 ⚠️200 ⚠️200 ⚠️200 ❌TimedOut ❌200 ❌200 ✅TimedOut ❌500 ❌200 ❌200 ❌200 ❌200 ⚠️200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌500 ❌500 ❌500 ⚠️200 ❌500 ❌500 ✅TimedOut ✅TimedOut ❌200 ⚠️200 ❌200 ❌500 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ❌100 ❌500 ❌500 ❌500 ❌500 ⚠️200 ⚠️200 ❌200 ❌200 ⚠️200 ⚠️200 ❌TimedOut ⚠️200 ❌TimedOut ⚠️200 ❌200 ❌500 ❌500
GenHTTP ❌TimedOut ❌200 ⚠️200 ❌200 ❌200 ❌200 ❌200 ✅200 ❌TimedOut ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ❌200 ❌200 ❌500 ❌200 ✅400 ❌500 ❌200 ⚠️200 ❌200 ❌200 ✅400 ✅400 ❌200 ❌500 ❌500 ❌500 ❌500 ❌500 ❌500 ❌200 ❌200 ❌200 ❌500 ❌200 ❌500 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ❌405 ✅400 ❌200 ⚠️200 ⚠️200 ❌200 ⚠️200 ⚠️200 ❌404 ❌200 ❌500 ⚠️200
Gin ⚠️200 ✅400 ⚠️200 ✅501 ❌TimedOut ✅400 ✅400 ❌200 ❌200 ⚠️200 ❌501 ⚠️200 ❌TimedOut ✅400 ❌501 ❌200 ❌200 ✅400 ✅400 ❌200 ❌501 ❌501 ❌501 ❌200 ✅400 ✅400 ❌200 ❌200 ⚠️200 ❌200 ⚠️200 ❌200 ❌200 ✅400 ✅400 ✅400 ❌TimedOut ✅501 ❌200 ⚠️200 ✅400 ✅400 ❌501 ❌100 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ❌TimedOut ❌501 ❌TimedOut ⚠️200 ✅400 ❌200 ⚠️200
Glyph11 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ❌200 ✅400 ⚠️200
Gunicorn ✅400 ✅400 ⚠️200 ✅501 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ❌501 ❌501 ✅400 ❌200 ✅400 ✅400 ❌200 ❌200 ⚠️200 ❌200 ⚠️200 ❌200 ❌200 ✅400 ✅400 ✅400 ⚠️200 ❌200 ❌200 ⚠️200 ✅400 ✅400 ❌501 ❌100 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ❌501 ✅400 ⚠️200 ❌200 ❌200 ⚠️200
H2O ⚠️200 ❌200 ⚠️200 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌100 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ❌200 ✅400 ⚠️200
HAProxy ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200
Hyper ⚠️200 ✅400 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ❌200 ❌200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ❌200 ✅400 ⚠️200 ✅400 ❌200 ✅400 ✅400 ❌200 ❌200 ⚠️200 ❌200 ⚠️200 ❌200 ❌200 ✅400 ✅400 ✅400 ❌TimedOut ✅400 ❌200 ⚠️200 ✅400 ✅400 ✅400 ❌100 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ❌200 ❌200 ⚠️200
Jetty ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200
Lighttpd ⚠️200 ❌200 ⚠️200 ❌200 ⚠️200 ❌200 ❌200 ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ⚠️200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌200 ⚠️200 ❌200 ⚠️200 ✅TimedOut ❌200 ❌200 ❌200 ❌200 ❌TimedOut ❌200 ❌200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ❌200 ❌200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ❌200 ❌200 ⚠️200
NetCoreServer ❌TimedOut ❌200 ⚠️200 ❌200 ❌200 ❌200 ✅400 ❌200 ❌TimedOut ✅400 ⚠️200 ⚠️200 ⚠️200 ✅400 ❌200 ❌200 ❌200 ✅400 ✅400 ❌200 ✅TimedOut ⚠️200 ❌200 ❌200 ✅400 ✅400 ❌200 ❌200 ⚠️200 ❌200 ⚠️200 ❌200 ❌200 ❌200 ❌200 ❌200 ❌TimedOut ❌200 ❌200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ❌200 ⚠️200 ⚠️200 ⚠️200 ❌200 ❌200 ⚠️200
Nginx ✅400 ✅400 ⚠️200 ✅501 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ❌501 ⚠️200 ✅400 ✅400 ❌501 ✅400 ❌200 ✅400 ✅400 ✅400 ❌501 ❌501 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ⚠️200 ❌200 ✅400 ❌501 ❌501 ✅400 ⚠️200 ✅501 ✅400 ⚠️200 ✅400 ✅400 ❌501 ❌100 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ❌501 ❌501 ⚠️200 ✅400 ✅400 ⚠️200
Node ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌100 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ❌200 ✅400 ⚠️200
Ntex ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌100 ✅400 ✅400 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ❌200 ✅400 ✅400
PHP ⚠️200 ❌200 ⚠️200 ❌200 ✅ClosedByServer ✅ClosedByServer ✅ClosedByServer ✅200 ✅200 ⚠️200 ⚠️200 ⚠️200 ✅ClosedByServer ✅ClosedByServer ✅ClosedByServer ✅ClosedByServer ❌200 ❌200 ✅ClosedByServer ✅ClosedByServer ❌200 ⚠️200 ✅ClosedByServer ✅ClosedByServer ✅ClosedByServer ❌200 ✅ClosedByServer ✅ClosedByServer ❌TimedOut ✅ClosedByServer ✅ClosedByServer ❌200 ✅ClosedByServer ❌200 ❌200 ❌200 ⚠️200 ❌200 ✅ClosedByServer ⚠️200 ✅ClosedByServer ✅ClosedByServer ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅ClosedByServer ✅ClosedByServer ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ❌200 ✅ClosedByServer ⚠️200
Pingora ⚠️200 ✅400 ⚠️200 ❌200 ❌500 ✅400 ❌200 ❌200 ❌200 ⚠️200 ⚠️200 ⚠️200 ❌500 ❌200 ❌200 ❌500 ❌200 ✅400 ❌200 ❌500 ❌200 ⚠️200 ❌500 ❌500 ❌200 ❌200 ❌500 ❌500 ❌TimedOut ❌500 ❌500 ❌200 ❌500 ✅400 ✅400 ✅400 ❌500 ❌200 ❌500 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ❌200 ❌200 ⚠️200 ⚠️200 ✅400 ⚠️200 ❌500 ⚠️200 ❌200 ❌500 ⚠️200
Puma ⚠️200 ✅400 ⚠️200 ✅501 ❌TimedOut ✅400 ✅400 ❌200 ❌200 ⚠️200 ✅400 ⚠️200 ❌TimedOut ✅400 ✅400 ✅TimedOut ❌200 ✅400 ✅400 ✅400 ❌501 ❌501 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ❌TimedOut ✅400 ✅400 ❌200 ❌200 ✅400 ✅400 ✅400 ❌TimedOut ✅501 ✅400 ⚠️200 ✅400 ✅400 ❌501 ❌100 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ❌TimedOut ❌TimedOut ⚠️200 ❌200 ✅400 ⚠️200
Quarkus ⚠️200 ✅400 ⚠️200 ❌200 ❌TimedOut ✅400 ✅400 ❌200 ❌200 ⚠️200 ❌TimedOut ⚠️200 ❌TimedOut ✅400 ❌200 ✅TimedOut ❌200 ✅400 ✅400 ✅ClosedByServer ❌200 ❌TimedOut ✅TimedOut ✅ClosedByServer ✅400 ✅400 ❌200 ✅ClosedByServer ⚠️200 ❌200 ⚠️200 ❌200 ❌200 ✅400 ✅400 ✅400 ⚠️200 ❌200 ✅ClosedByServer ⚠️200 ✅400 ✅400 ⚠️200 ❌100 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ❌TimedOut ❌TimedOut ❌TimedOut ⚠️200 ✅400 ✅TimedOut ⚠️200
ServiceStack ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ❌200 ❌200 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ❌TimedOut ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ❌200 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200
SimpleW ❌TimedOut ✅400 ⚠️200 ❌TimedOut ❌TimedOut ✅400 ✅400 ❌TimedOut ❌TimedOut ⚠️200 ❌TimedOut ⚠️200 ❌TimedOut ✅400 ✅TimedOut ✅TimedOut ✅TimedOut ✅400 ✅400 ✅400 ❌200 ❌TimedOut ✅TimedOut ✅400 ✅400 ✅400 ✅TimedOut ❌500 ❌TimedOut ❌500 ❌500 ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ❌TimedOut ❌200 ✅400 ⚠️200 ✅400 ✅400 ❌TimedOut ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ❌404 ❌404 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ❌TimedOut ❌TimedOut ✅400 ❌200 ✅400 ⚠️200
Sisk ⚠️200 ✅400 ⚠️200 ✅501 ✅400 ✅400 ✅400 ❌200 ❌200 ⚠️200 ❌501 ⚠️200 ✅400 ✅400 ❌501 ❌200 ❌200 ❌200 ✅400 ✅400 ❌501 ❌501 ❌501 ✅400 ✅400 ✅400 ✅400 ✅400 ❌TimedOut ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ❌TimedOut ✅501 ✅400 ⚠️200 ✅400 ✅400 ❌501 ❌100 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ❌200 ⚠️200 ⚠️200 ✅400 ❌501 ✅400 ⚠️200 ❌200 ✅400 ⚠️200
Spring Boot ⚠️200 ✅400 ⚠️200 ✅501 ✅400 ✅400 ✅400 ✅200 ✅200 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅501 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌100 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200
Tomcat ⚠️200 ✅400 ⚠️200 ✅501 ❌500 ✅400 ✅400 ✅200 ✅200 ⚠️200 ✅400 ⚠️200 ❌500 ✅400 ✅400 ❌500 ❌200 ✅400 ✅400 ❌500 ✅400 ❌500 ✅400 ❌500 ✅400 ✅400 ❌500 ❌500 ❌500 ❌500 ❌500 ❌200 ❌500 ✅400 ✅400 ✅400 ❌500 ✅501 ❌500 ⚠️200 ✅400 ✅400 ✅400 ❌100 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ❌500 ❌500 ❌500 ✅400 ✅400 ❌500 ⚠️200
Traefik ⚠️200 ✅400 ⚠️200 ✅501 ❌TimedOut ✅400 ✅400 ❌200 ❌200 ⚠️200 ❌501 ⚠️200 ❌TimedOut ✅400 ❌501 ❌200 ❌200 ✅400 ✅400 ❌200 ❌501 ❌501 ❌501 ❌200 ✅400 ✅400 ❌200 ❌200 ⚠️200 ❌200 ⚠️200 ❌200 ❌200 ✅400 ✅400 ✅400 ❌TimedOut ✅501 ❌200 ⚠️200 ✅400 ✅400 ❌501 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ❌TimedOut ❌501 ❌TimedOut ⚠️200 ✅400 ❌200 ⚠️200
Uvicorn ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ⚠️200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ❌200 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ✅400 ⚠️200 ✅400 ✅400 ✅400 ❌100 ✅400 ✅400 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ✅400 ✅400 ⚠️200 ⚠️200 ✅400 ✅400 ✅400 ⚠️200 ❌200 ✅400 ⚠️200
Watson ❌TimedOut ✅400 ❌TimedOut ✅501 ❌TimedOut ✅TimedOut ✅400 ❌TimedOut ❌TimedOut ❌TimedOut ❌501 ❌TimedOut ❌TimedOut ✅400 ❌501 ✅TimedOut ✅TimedOut ✅TimedOut ✅400 ✅TimedOut ❌501 ❌501 ❌501 ✅TimedOut ✅400 ✅400 ✅TimedOut ✅TimedOut ❌TimedOut ✅TimedOut ❌TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅TimedOut ✅400 ❌TimedOut ✅501 ✅TimedOut ❌TimedOut ✅400 ✅400 ❌501 ❌100 ❌TimedOut ❌TimedOut ❌TimedOut ❌TimedOut ❌TimedOut ❌TimedOut ✅400 ✅TimedOut ❌TimedOut ❌TimedOut ✅400 ❌501 ❌TimedOut ❌TimedOut ✅TimedOut ✅TimedOut ❌TimedOut

Malformed Input

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

Header Normalization

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

Commit: a0d8f3a

@MDA2AV
MDA2AV merged commit f7f7d5e into main Feb 14, 2026
1 check passed
@MDA2AV
MDA2AV deleted the tests/adding-new-tests branch February 16, 2026 11:41
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