From 458e25cf79140b6462ae7e28fdc949171dfec822 Mon Sep 17 00:00:00 2001 From: Kharec Date: Sun, 23 Nov 2025 14:48:59 +0100 Subject: [PATCH] fix: modify compression middleware to pass through redirects immediately without buffering --- internal/middleware/compression.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/internal/middleware/compression.go b/internal/middleware/compression.go index af91e8e..71465b0 100644 --- a/internal/middleware/compression.go +++ b/internal/middleware/compression.go @@ -38,6 +38,10 @@ func CompressionMiddlewareWithConfig(config *CompressionConfig) func(http.Handle next.ServeHTTP(bufferedWriter, r) + if bufferedWriter.isRedirect { + return + } + if buf.Len() < config.MinSize { bufferedWriter.flush() w.Write(buf.Bytes()) @@ -73,9 +77,13 @@ type bufferedResponseWriter struct { buffer *bytes.Buffer statusCode int headerWritten bool + isRedirect bool } func (brw *bufferedResponseWriter) Write(b []byte) (int, error) { + if brw.isRedirect { + return brw.ResponseWriter.Write(b) + } if !brw.headerWritten { brw.statusCode = http.StatusOK } @@ -87,6 +95,11 @@ func (brw *bufferedResponseWriter) WriteHeader(code int) { return } brw.statusCode = code + if isRedirect(code) { + brw.isRedirect = true + brw.ResponseWriter.WriteHeader(code) + brw.headerWritten = true + } } func (brw *bufferedResponseWriter) Header() http.Header { @@ -100,6 +113,10 @@ func (brw *bufferedResponseWriter) flush() { } } +func isRedirect(statusCode int) bool { + return statusCode >= 300 && statusCode < 400 +} + func shouldCompress(r *http.Request, config *CompressionConfig) bool { return r.Header.Get("Content-Encoding") == "" }