Browse Source

reverseproxy: Restore request's original host and header (fix #3509)

We already restore them within the retry loop, but after successful
proxy we didn't reset them, so as handlers bubble back up, they would
see the values used for proxying.

Thanks to @ziddey for identifying the cause.
master
Matthew Holt 5 years ago
parent
commit
246a31aacd
No known key found for this signature in database GPG Key ID: 2A349DD577D586A5
  1. 13
      modules/caddyhttp/reverseproxy/reverseproxy.go

13
modules/caddyhttp/reverseproxy/reverseproxy.go

@ -329,10 +329,17 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyht
fmt.Errorf("preparing request for upstream round-trip: %v", err))
}
// we will need the original headers and Host
// value if header operations are configured
reqHeader := r.Header
// we will need the original headers and Host value if
// header operations are configured; and we should
// restore them after we're done if they are changed
// (for example, changing the outbound Host header
// should not permanently change r.Host; issue #3509)
reqHost := r.Host
reqHeader := r.Header
defer func() {
r.Host = reqHost
r.Header = reqHeader
}()
start := time.Now()

Loading…
Cancel
Save