Skip to content

Wing Protocol Support Matrix

Wing is a deliberate, high-performance HTTP/1.1 subset. This page is the authoritative statement of what it speaks. Anything marked "via net/http" means Kruda automatically serves through the net/http transport in that configuration — you keep correctness, you are just not running Wing.

CapabilityWingNotes
HTTP/1.1 keep-aliveDefault
HTTP/1.1 pipeliningResponses written in request order
Request header retention✅ All headers8 inline slots + heap spill; spills observable via WingHeaderSpills()
Request size limitsBodyLimit → 413, HeaderLimit (8 KB default) → 431
Expect: 100-continueInterim 100 sent when the body must be awaited
Chunked request bodies (Transfer-Encoding)❌ → 501Send Content-Length; chunked uploads need net/http
Chunked response bodies❌ (by design)Fixed responses use Content-Length; incremental responses use the Stream preset (close-delimited, SSE-style)
TrailersNot parsed, not emitted
SSE / incremental streamingc.SSE() / c.Stream() with the kruda.Stream route preset (v1.5.0+)
WebSocketws.HandleFunc(app, "/ws", handler) — Wing hands the connection to contrib/ws via the kruda.Hijack preset (v1.6.0+)
TLS / HTTPSvia net/httpWithTLS auto-falls back — see Production TLS
HTTP/2via net/httpNegotiated by net/http under TLS
HTTP/3Cancelled from the roadmap (v1.5.0)
Proxy client IPsX-Forwarded-For / X-Real-IP honored only under WithTrustProxy(true)
Accept-side DoS limitsConnection cap, per-IP cap, accept-rate bucket (v1.4.0)

Deployment guidance

  • Linux + plaintext HTTP/1.1 (typically behind a TLS-terminating proxy or load balancer): Wing — this is the configuration all published benchmarks use.
  • Direct HTTPS / HTTP/2 / Windows: net/http transport, selected automatically.
  • Anything this table calls unsupported fails loudly (501/413/431), never silently.

Released under the MIT License.