Overview

Hardening

Request-size caps

Request bodies over the configured limit are rejected with 413 before the server finishes buffering them — an oversized upload can't consume unbounded memory.

Slowloris guard

A connection that sends bytes slowly enough to hold a slot open without completing a request — the classic slowloris resource-exhaustion pattern — is detected and closed rather than left to accumulate.

Path-traversal safety

staticHandler(root) resolves requested paths against root and rejects any resolution that escapes it — ../../etc/passwd-style requests are rejected before touching the filesystem.

Streamed responses, no truncation

Large response bodies stream to the client instead of being buffered whole in memory, and streaming is verified not to truncate output under load.

Named crash diagnostics

When a handler panics, the crash now names the request that caused it — see reactor_raise.nim in the repo, added specifically so a production crash points at the request, not just a stack trace.

Bounded outbound proxying

When serve is used to proxy requests outward, the outbound fetch is bounded — a single dead upstream can't turn into a dead server. See reactor_proxy.nim.