From ca95b561dc74f6b553c2b4f5237a04b15959f3ca Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Sat, 2 May 2015 09:20:39 -0600 Subject: [PATCH] gzip: Fix Content-Length header for proxies requests (closes #38) --- middleware/gzip/gzip.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/middleware/gzip/gzip.go b/middleware/gzip/gzip.go index 694118321..8bbc1d146 100644 --- a/middleware/gzip/gzip.go +++ b/middleware/gzip/gzip.go @@ -64,6 +64,15 @@ type gzipResponseWriter struct { http.ResponseWriter } +// WriteHeader wraps the underlying WriteHeader method to prevent +// problems with conflicting headers from proxied backends. For +// example, a backend system that calculates Content-Length would +// be wrong because it doesn't know it's being gzipped. +func (w gzipResponseWriter) WriteHeader(code int) { + w.Header().Del("Content-Length") + w.ResponseWriter.WriteHeader(code) +} + // Write wraps the underlying Write method to do compression. func (w gzipResponseWriter) Write(b []byte) (int, error) { if w.Header().Get("Content-Type") == "" {