Zum Inhalt springen

HTTP-Middleware

Middleware verarbeitet HTTP-Anfragen vor und nach der Routen-Behandlung.

Middleware umhüllt HTTP-Handler um Verarbeitungslogik hinzuzufügen. Jede Middleware erhält eine Options-Map und gibt einen Handler-Wrapper zurück:

middleware:
- cors
- ratelimit
options:
cors.allow.origins: "https://example.com"
ratelimit.requests: "100"

Optionen verwenden Punkt-Notation: middleware_name.option.name. Legacy-Unterstrich-Format wird für Abwärtskompatibilität unterstützt.

Pre-Match läuft vor dem Routen-Matching - für Querschnittsbelange wie CORS und Komprimierung. Post-Match läuft nachdem die Route gematcht ist - für Autorisierung die Routen-Info benötigt.
middleware: # Pre-Match
- cors
- compress
options:
cors.allow.origins: "*"
post_middleware: # Post-Match
- endpoint_firewall
post_options:
endpoint_firewall.action: "access"

Pre-Match

Cross-Origin Resource Sharing für Browser-Anfragen.

middleware:
- cors
options:
cors.allow.origins: "https://app.example.com"
cors.allow.credentials: "true"
OptionStandardBeschreibung
cors.allow.origins*Erlaubte Origins (kommasepariert, unterstützt *.example.com)
cors.allow.methodsGET,POST,PUT,DELETE,OPTIONS,PATCHErlaubte Methoden
cors.allow.headersOrigin,Content-Type,Accept,Authorization,X-Requested-WithErlaubte Request-Header
cors.expose.headers-Dem Client exponierte Header
cors.allow.credentialsfalseCookies/Auth erlauben
cors.max.age86400Preflight-Cache (Sekunden)
cors.allow.private.networkfalsePrivater Netzwerkzugriff

OPTIONS-Preflight-Anfragen werden automatisch behandelt.


Pre-Match

Token-Bucket-Rate-Limiting mit Per-Key-Tracking.

middleware:
- ratelimit
options:
ratelimit.requests: "100"
ratelimit.window: "1m"
ratelimit.key: "ip"
OptionStandardBeschreibung
ratelimit.requests100Anfragen pro Fenster
ratelimit.window1mZeitfenster
ratelimit.burst20Burst-Kapazität
ratelimit.keyipSchlüssel-Strategie
ratelimit.cleanup_interval5mBereinigungs-Frequenz
ratelimit.entry_ttl10mEintrags-Ablauf
ratelimit.max_entries100000Max verfolgte Schlüssel

Schlüssel-Strategien: ip, header:X-API-Key, query:api_key

Gibt 429 Too Many Requests mit Headern zurück: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.


Pre-Match

Gzip-Komprimierung für Responses.

middleware:
- compress
options:
compress.level: "default"
compress.min.length: "1024"
OptionStandardBeschreibung
compress.leveldefaultfastest, default oder best
compress.min.length1024Minimale Response-Größe (Bytes)

Komprimiert nur wenn Client Accept-Encoding: gzip sendet.


Pre-Match

Client-IP aus Proxy-Headern extrahieren.

middleware:
- real_ip
options:
real_ip.trusted.subnets: "10.0.0.0/8,172.16.0.0/12"
OptionStandardBeschreibung
real_ip.trusted.subnetsPrivate NetzwerkeVertrauenswürdige Proxy-CIDRs
real_ip.trust_allfalseAllen Quellen vertrauen (unsicher)

Header-Priorität: True-Client-IP > X-Real-IP > X-Forwarded-For


Pre-Match

Token-basierte Authentifizierung. Siehe Sicherheit für Token-Store-Konfiguration.

middleware:
- token_auth
options:
token_auth.store: "app:tokens"
OptionStandardBeschreibung
token_auth.storeerforderlichToken-Store-Registry-ID
token_auth.header.nameAuthorizationHeader-Name
token_auth.header.prefixBearer Header-Präfix
token_auth.query.paramx-auth-tokenQuery-Parameter-Fallback
token_auth.cookie.namex-auth-tokenCookie-Fallback

Setzt Actor und Sicherheits-Scope im Kontext für nachgelagerte Middleware. Blockiert keine Anfragen - Autorisierung erfolgt in Firewall-Middleware.


Pre-Match

Prometheus-Style HTTP-Metriken. Keine Konfigurationsoptionen.

middleware:
- metrics
MetrikTypBeschreibung
wippy_http_requests_totalCounterGesamte Anfragen
wippy_http_request_duration_secondsHistogramRequest-Latenz
wippy_http_requests_in_flightGaugeGleichzeitige Anfragen

Post-Match

Autorisierung basierend auf gematchtem Endpunkt. Erfordert Actor von token_auth.

post_middleware:
- endpoint_firewall
post_options:
endpoint_firewall.action: "access"
OptionStandardBeschreibung
endpoint_firewall.actionaccessZu prüfende Berechtigungs-Aktion

Gibt 401 Unauthorized (kein Actor) oder 403 Forbidden (Berechtigung verweigert) zurück.


Post-Match

Bestimmte Ressourcen nach ID schützen. Nützlich auf Router-Ebene.

post_middleware:
- resource_firewall
post_options:
resource_firewall.action: "admin"
resource_firewall.target: "app:admin-panel"
OptionStandardBeschreibung
resource_firewall.actionaccessBerechtigungs-Aktion
resource_firewall.targeterforderlichRessourcen-Registry-ID

Pre-Match

Dateien über X-Sendfile-Header von Handlern bereitstellen.

middleware:
- sendfile
options:
sendfile.fs: "app:downloads"

Handler setzt Header um Datei-Bereitstellung auszulösen:

HeaderBeschreibung
X-SendfileDateipfad innerhalb des Dateisystems
X-File-NameDownload-Dateiname

Unterstützt Range-Requests für fortsetzbare Downloads.


Post-Match

WebSocket-Verbindungen an Prozesse weiterleiten. Siehe WebSocket-Relay.

post_middleware:
- websocket_relay
post_options:
wsrelay.allowed.origins: "https://app.example.com"

Post-match

Server-Sent Events von Prozessen streamen. Siehe Server-Sent Events.

post_middleware:
- sse_relay
post_options:
sserelay.allowed.origins: "https://app.example.com"

Pre-match

Zeichnet OpenTelemetry-Spans und -Metriken fuer eingehende Anfragen auf. Wird automatisch registriert, wenn OTel aktiviert ist; wirkt andernfalls als No-Op.

middleware:
- otel

Nimmt keine Optionen entgegen. Funktioniert zusammen mit der metrics-Middleware; aktivieren Sie beide, wenn Sie Prometheus-Counter und OTel-Traces benoetigen.


Middleware wird in aufgelisteter Reihenfolge ausgeführt. Empfohlene Sequenz:

middleware:
- real_ip # 1. Real IP zuerst extrahieren
- cors # 2. CORS-Preflight behandeln
- compress # 3. Response-Komprimierung einrichten
- ratelimit # 4. Rate-Limits prüfen
- metrics # 5. Metriken aufzeichnen
- token_auth # 6. Anfragen authentifizieren
post_middleware:
- endpoint_firewall # Nach Routen-Match autorisieren