Caddy v2.11.7

v2.11.7
Added 2
  • Added support for the Incremental header field (RFC 10036) which enables immediate forwarding of upstream responses
  • Added proxy_status_name option to add a Proxy-Status header explaining why an incremental message was refused
Changed 1
  • CertMagic no longer builds event data for every TLS handshake when nothing subscribes to certificate events and debug logging is off, making certificate lookup about twice as fast
Fixed 7
  • Fixed crash and nil pointer dereference when proxying over HTTP/2 where the reverse proxy was still reading a request body after the handler had returned
  • Fixed streaming responses to requests with a body being cut off exactly 60 seconds after the body was read over HTTP/1.1
  • Fixed streaming responses over HTTP/2 that paused between writes for longer than the write_idle timeout being reset with a stream error
  • Fixed placeholders for missing cookies and TLS fields to remain empty instead of being output literally
  • Fixed Unix socket listeners and admin endpoint to close immediately and remove the socket file when a reload moves the listener off the socket
  • Fixed headers handler to send multiple Set-Cookie values in JSON config as separate header fields instead of joining them with commas
  • Fixed caddy fmt to no longer delete an opening brace at the very end of the input

From Caddy

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 (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 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 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 forwards it immediately, the same as flush_interval -1, and encode streams it instead of holding it back. Great for Mercure, SSE and other streaming apps.

    • If the request_buffers or 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 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
New Contributors

Full Changelog: https://github.com/caddyserver/caddy/compare/v2.11.6...v2.11.7

View original

Upgraded? How did it go?

Discussion