v2.11.7
caddyserver/caddyv2.11.7Oct 3, 2026by github-actions[bot]
Upgrading?
AI Summary
This patch release fixes regressions from v2.11.6 regarding idle timeouts and adds support for the Incremental header field (RFC 10036) for streaming responses.
Key Highlights
- Fixed crash and dropped streams caused by the new idle timeouts in v2.11.6.
- Fixed placeholders for missing cookies and TLS to be empty again.
- New support for the Incremental header field (RFC 10036) for streaming apps like Mercure.
- Faster TLS handshakes with CertMagic optimizations.
- Unix sockets now close immediately and unlink files on reload.
New Features
- Support for the Incremental header field (RFC 10036).
- New `proxy_status_name` option for reverse_proxy.
- Headers handler now sends multiple `Set-Cookie` values as separate headers instead of joining them.
Full Release Notes
This patch release fixes regressions from 2.11.6, including a crash when proxying over HTTP/2 and streams that were cut off after a minute. **If you're on 2.11.6, we recommend upgrading.** It also adds support for the brand new `Incremental` header field (RFC 10036).
**Huge thank you to our sponsors for keeping the project alive with resources, and for our maintainers who triage and assist tirelessly in this relentless new age of AI.**
## Highlights
- **Fixed: crash and dropped streams caused by the new idle timeouts.** 2.11.6 introduced default idle read/write timeouts, which caused some problems:
- In 2.11.6, the request body's idle deadline could outlive the handler that set it:
- Over HTTP/2, Caddy could panic with a nil pointer dereference when the reverse proxy was still reading a request body after the handler had returned. (#8101)
- Over HTTP/1.1, streaming responses to requests with a body, such as SSE clients that open the stream with a `POST`, were cut off exactly 60 seconds after the body was read. (#8103)
Both are fixed in #8107. Thanks @steadytao!
- Over HTTP/2, streaming responses that paused between writes for longer than [`write_idle`](https://caddyserver.com/docs/caddyfile/options#timeouts) (1 minute by default), like quiet SSE streams, were reset with a stream error. As documented, only a write that stalls should count. Thanks @WeidiDeng! (#8118, #8119)
- **Fixed: placeholders for missing cookies are empty again.** Since 2.11.6, places that keep unknown placeholders as written, like [`respond`](https://caddyserver.com/docs/caddyfile/directives/respond) headers, would output `{http.request.cookie.*}` literally when the cookie wasn't in the request. The same happened to `{http.request.tls.*}` on plain HTTP requests. Both are empty again. Thanks @steadytao! (#8019)
- **New: support for the [`Incremental`](https://www.rfc-editor.org/rfc/rfc10036.html) header field (RFC 10036).** It's the standard replacement for NGINX's proprietary `X-Accel-Buffering` header. If an upstream response has `Incremental: ?1`, [`reverse_proxy`](https://caddyserver.com/docs/caddyfile/directives/reverse_proxy#streaming) forwards it immediately, the same as [`flush_interval -1`](https://caddyserver.com/docs/caddyfile/directives/reverse_proxy#flush_interval), and [`encode`](https://caddyserver.com/docs/caddyfile/directives/encode) streams it instead of holding it back. Great for [Mercure](https://mercure.rocks), SSE and other streaming apps.
- If the [`request_buffers`](https://caddyserver.com/docs/caddyfile/directives/reverse_proxy#request_buffers) or [`response_buffers`](https://caddyserver.com/docs/caddyfile/directives/reverse_proxy#response_buffers) options would prevent incremental forwarding, Caddy responds with `501 Not Implemented` instead of silently buffering, as the RFC requires.
- The new [`proxy_status_name`](https://caddyserver.com/docs/caddyfile/directives/reverse_proxy#proxy_status_name) option adds a `Proxy-Status` header to those responses, explaining why the message was refused.
Thanks @dunglas! (#8020)
- **Faster TLS handshakes:** When nothing subscribes to certificate events and debug logging is off, CertMagic no longer builds event data for every handshake. Certificate lookup per handshake is about twice as fast, with 10 allocations instead of 15. Thanks @u5surf! (#8010)
- **Unix sockets:** When a reload moves a listener (or the admin endpoint) off a Unix socket, the old socket now closes right away and its file is removed. Before, clients connecting to the old path would hang until the next garbage collection, about 2 minutes later. Thanks @littfed! (#8061)
- **Headers handler:** Multiple `Set-Cookie` values in a JSON config's `set` are now sent as separate header fields, instead of being joined with commas into one field that clients can't parse. Thanks @Indra55! (#8080)
- **`caddy fmt`** no longer deletes an opening brace at the very end of the input. Thanks @n0liu! (#8047)
## What's Changed
* events: tell CertMagic which events are worth emitting by @u5surf in https://github.com/caddyserver/caddy/pull/8010
* feat: implement the Incremental header field (RFC 10036) by @dunglas in https://github.com/caddyserver/caddy/pull/8020
* caddyfile: Keep an opening brace that ends the input by @n0liu in https://github.com/caddyserver/caddy/pull/8047
* listeners: close unix socket immediately and unlink file on reload by @littfed in https://github.com/caddyserver/caddy/pull/8061
* reverseproxy: stabilise half-close test by @steadytao in https://github.com/caddyserver/caddy/pull/8049
* caddyhttp: keep absent optional placeholders empty by @steadytao in https://github.com/caddyserver/caddy/pull/8019
* headers: Preserve separate Set-Cookie values by @Indra55 in https://github.com/caddyserver/caddy/pull/8080
* caddyhttp: end request-body deadline ownership with handler by @steadytao in https://github.com/caddyserver/caddy/pull/8107
* timeouts: fix idle writer terminate h2 response writers between writes by @WeidiDeng in https://github.com/caddyserver/caddy/pull/8119
## New Contributors
* @n0liu made their first contribution in https://github.com/caddyserver/caddy/pull/8047
* @littfed made their first contribution in https://github.com/caddyserver/caddy/pull/8061
**Full Changelog**: https://github.com/caddyserver/caddy/compare/v2.11.6...v2.11.7Related Repositories
ollama/ollama★ 184,205
Get up and running with Kimi, GLM, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other models.
fatedier/frp★ 110,051
A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
asheshgoplani/agent-deck★ 102,148
Terminal session manager for AI coding agents. One TUI for Claude, Gemini, OpenCode, Codex, and more.
infiniflow/ragflow★ 92,612
RAGFlow is a leading open-source Retrieval-Augmented Generation (RAG) engine that fuses cutting-edge RAG with Agent capabilities to create a superior context layer for LLMs
gohugoio/hugo★ 90,198
The world’s fastest framework for building websites.