Dev News Daily ENDE

Caddy 2.11.7 behebt HTTP/2-Absturz und nach 60 Sekunden abgerissene SSE-Streams aus 2.11.6

Der Webserver Caddy hat am 3. Oktober Version 2.11.7 veröffentlicht, einen Patch, der Rückschritte aus 2.11.6 behebt. Die Maintainer empfehlen allen, die 2.11.6 einsetzen, das Update.

Was schiefging. Version 2.11.6 führte standardmäßige Leerlauftimeouts für Lesen und Schreiben ein, und mehrere Probleme folgten:

  • Die Leerlauffrist für den Request-Body konnte den Handler überdauern, der sie gesetzt hatte. Über HTTP/2 konnte Caddy dann mit einer Nullzeiger-Dereferenzierung abstürzen, wenn der Reverse Proxy noch einen Request-Body las, nachdem der Handler zurückgekehrt war.
  • Über HTTP/1.1 wurden Streaming-Antworten auf Anfragen mit Body – etwa Server-Sent-Events-Clients, die den Stream mit POST öffnen – genau 60 Sekunden nach dem Lesen des Bodys abgeschnitten.
  • Über HTTP/2 wurden Streaming-Antworten, die zwischen zwei Schreibvorgängen länger als write_idle pausierten, standardmäßig eine Minute, mit einem Stream-Fehler zurückgesetzt, etwa ruhige SSE-Streams. Laut Dokumentation sollte nur ein hängender Schreibvorgang zählen. Alle drei sind behoben. Ein weiterer Rückschritt aus 2.11.6 ließ Platzhalter für fehlende Cookies und TLS-Platzhalter bei unverschlüsselten Anfragen wörtlich in Ausgaben wie respond-Headern erscheinen; sie sind wieder leer.

Neu: der Header Incremental. Caddy unterstützt jetzt das Header-Feld Incremental aus RFC 10036, laut Versionshinweisen der Standardersatz für nginx' proprietären Header X-Accel-Buffering. Eine Upstream-Antwort mit Incremental: ?1 leitet reverse_proxy sofort weiter, und encode streamt sie, statt sie zurückzuhalten. Würden Pufferoptionen das verhindern, antwortet Caddy wie im RFC verlangt mit 501 Not Implemented; die neue Option proxy_status_name kann den Grund in einem Proxy-Status-Header nennen.

Kleinere Änderungen. Die Zertifikatssuche beim TLS-Handshake ist etwa doppelt so schnell, wenn niemand Zertifikatsereignisse abonniert und das Debug-Logging aus ist. Nach einem Neuladen aufgegebene Unix-Sockets schließen sofort, statt Clients rund zwei Minuten hängen zu lassen. Mehrere Set-Cookie-Werte in einer JSON-Konfiguration werden als getrennte Header gesendet, und caddy fmt löscht keine öffnende Klammer am Ende der Eingabe mehr.

Caddy 2.11.7 behebt HTTP/2-Absturz und nach 60 Sekunden abgerissene SSE-Streams aus 2.11.6
Caddy 2.11.7 behebt HTTP/2-Absturz und nach 60 Sekunden abgerissene SSE-Streams aus 2.11.6 — Dev News Daily

Was das bedeutet

Wer 2.11.6 vor Streaming-Anwendungen betreibt – Server-Sent Events, Long Polling, Token-Streams von KI-Modellen –, sollte das als dringendes Update behandeln: Der Abbruch nach 60 Sekunden wirkt wie ein Fehler im Client oder in der Anwendung und wird leicht falsch gedeutet. Langfristig gewinnt man mit dem Header Incremental einen Standardweg, jeden Proxy um ungepuffertes Weiterleiten zu bitten.