Files
Kévin Dunglas a28f061462 caddyhttp: let handler read deadlines cap the idle read timeout (#8284)
* caddyhttp: let handler read deadlines cap the idle read timeout

IdleTimeoutReader sets the read deadline before every body read, so a
deadline set by a handler with http.ResponseController.SetReadDeadline()
was replaced before it could take effect. Since #7913, handlers can't
bound a stalled request body more tightly than read_body.

A handler's read deadline is now routed to the IdleTimeoutReader, which
applies it right away and keeps it as a ceiling for every idle reset and
for the deadline put back between HTTP/2 reads. A handler can make the
idle timeout stricter but can't loosen it, and a zero deadline removes
the ceiling, as #8145 does for write deadlines.

* caddyhttp: keep the hard read deadline and the drain deadline with handler deadlines

SetReadDeadline installed the handler's deadline as is, so a later or zero
deadline lifted read_timeout. It now installs the earlier of the two.

HandlerDone cleared a deadline set by the handler before arming the HTTP/1
drain deadline, leaving the post-handler drain unbounded.

* caddyhttp: keep the idle deadline of a read in flight on handler deadlines

SetReadDeadline replaced the idle deadline armed for a blocked read with the
handler's ceiling, so a zero or later deadline lifted the idle timeout for
that read. It now installs the earlier of the two until the read returns.

* caddyhttp: keep the expired drain deadline of a timed-out body on handler deadlines

After a body read timed out on HTTP/1, a zero or later deadline set by the
handler replaced the expired one kept to bound net/http's post-handler drain.
2026-10-29 23:22:59 +10:00
..