mirror of
https://github.com/caddyserver/caddy.git
synced 2024-12-16 21:56:40 -05:00
reverseproxy: Revert #4952 - don't ignore context cancellation in stream mode
i.e. Revert commit f5dce84a70
Two years ago, the patch in #4952 was a seemingly necessary way to fix an issue (sort of an edge case), but it broke other more common use cases (see #6666).
Now, as of #6669, it seems like the original issue can no longer be replicated, so we are reverting that patch, because it was incorrect anyway.
If it turns out the original issue returns, a more proper patch may be in #6669 (even if used as a baseline for a future fix). A potential future fix could be an opt-in setting.
This commit is contained in:
parent
04a58a9356
commit
e4623e72aa
1 changed files with 1 additions and 16 deletions
|
@ -106,11 +106,6 @@ type Handler struct {
|
||||||
// response is recognized as a streaming response, or if its
|
// response is recognized as a streaming response, or if its
|
||||||
// content length is -1; for such responses, writes are flushed
|
// content length is -1; for such responses, writes are flushed
|
||||||
// to the client immediately.
|
// to the client immediately.
|
||||||
//
|
|
||||||
// Normally, a request will be canceled if the client disconnects
|
|
||||||
// before the response is received from the backend. If explicitly
|
|
||||||
// set to -1, client disconnection will be ignored and the request
|
|
||||||
// will be completed to help facilitate low-latency streaming.
|
|
||||||
FlushInterval caddy.Duration `json:"flush_interval,omitempty"`
|
FlushInterval caddy.Duration `json:"flush_interval,omitempty"`
|
||||||
|
|
||||||
// A list of IP ranges (supports CIDR notation) from which
|
// A list of IP ranges (supports CIDR notation) from which
|
||||||
|
@ -773,17 +768,7 @@ func (h *Handler) reverseProxy(rw http.ResponseWriter, req *http.Request, origRe
|
||||||
}
|
}
|
||||||
req = req.WithContext(httptrace.WithClientTrace(req.Context(), trace))
|
req = req.WithContext(httptrace.WithClientTrace(req.Context(), trace))
|
||||||
|
|
||||||
// if FlushInterval is explicitly configured to -1 (i.e. flush continuously to achieve
|
// do the round-trip
|
||||||
// low-latency streaming), don't let the transport cancel the request if the client
|
|
||||||
// disconnects: user probably wants us to finish sending the data to the upstream
|
|
||||||
// regardless, and we should expect client disconnection in low-latency streaming
|
|
||||||
// scenarios (see issue #4922)
|
|
||||||
if h.FlushInterval == -1 {
|
|
||||||
req = req.WithContext(ignoreClientGoneContext{req.Context()})
|
|
||||||
}
|
|
||||||
|
|
||||||
// do the round-trip; emit debug log with values we know are
|
|
||||||
// safe, or if there is no error, emit fuller log entry
|
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
res, err := h.Transport.RoundTrip(req)
|
res, err := h.Transport.RoundTrip(req)
|
||||||
duration := time.Since(start)
|
duration := time.Since(start)
|
||||||
|
|
Loading…
Reference in a new issue