mirror of
https://github.com/caddyserver/caddy.git
synced 2026-11-11 19:37:55 +00:00
The consumed-stream retry guard treated any read of a streaming request body as consumption. Go's transport probes unknown-length bodies of GET, HEAD, and similar requests before sending them, and HTTP/3 reports bodyless GET and HEAD requests with an unknown length, so every such request lost its retries once an upstream connection was established. A first read that returns io.EOF without data no longer counts as consumption. Later attempts send http.NoBody, while bodies that yield data, fail, or are interrupted mid-read remain non-retryable. Follow-up to de1bcf6d-457c-4348-9d4e-5eeb41cc120b. Code written by GitHub Copilot (GPT-6.1 Sol, Claude Opus 5.5); reviewed by mholt. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>