From 0a4abdb48c925b1c7efe12c5a7cef38c1aa67a53 Mon Sep 17 00:00:00 2001 From: LordMathis Date: Tue, 4 Nov 2025 19:04:26 +0100 Subject: [PATCH] Add Vary header --- server/internal/handlers/static_handler.go | 2 ++ .../handlers/static_handler_integration_test.go | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/server/internal/handlers/static_handler.go b/server/internal/handlers/static_handler.go index 0b2ffab..13944ce 100644 --- a/server/internal/handlers/static_handler.go +++ b/server/internal/handlers/static_handler.go @@ -108,6 +108,7 @@ func (h *StaticHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { if _, err := os.Stat(brPath); err == nil { w.Header().Set("Content-Encoding", "br") w.Header().Set("Content-Type", getContentType(cleanPath)) + w.Header().Set("Vary", "Accept-Encoding") http.ServeFile(w, r, brPath) return } @@ -119,6 +120,7 @@ func (h *StaticHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { if _, err := os.Stat(gzPath); err == nil { w.Header().Set("Content-Encoding", "gzip") w.Header().Set("Content-Type", getContentType(cleanPath)) + w.Header().Set("Vary", "Accept-Encoding") http.ServeFile(w, r, gzPath) return } diff --git a/server/internal/handlers/static_handler_integration_test.go b/server/internal/handlers/static_handler_integration_test.go index 0835cad..38f1584 100644 --- a/server/internal/handlers/static_handler_integration_test.go +++ b/server/internal/handlers/static_handler_integration_test.go @@ -56,6 +56,7 @@ func TestStaticHandler_Integration(t *testing.T) { wantType string wantEncoding string wantCacheHeader string + wantVary string }{ { name: "serve index.html", @@ -73,6 +74,7 @@ func TestStaticHandler_Integration(t *testing.T) { wantType: "text/css", wantEncoding: "gzip", wantCacheHeader: "public, max-age=31536000", + wantVary: "Accept-Encoding", }, { name: "serve JS with gzip support", @@ -83,6 +85,7 @@ func TestStaticHandler_Integration(t *testing.T) { wantType: "application/javascript", wantEncoding: "gzip", wantCacheHeader: "public, max-age=31536000", + wantVary: "Accept-Encoding", }, { name: "serve CSS without gzip", @@ -127,6 +130,7 @@ func TestStaticHandler_Integration(t *testing.T) { wantType: "text/css", wantEncoding: "br", wantCacheHeader: "public, max-age=31536000", + wantVary: "Accept-Encoding", }, { name: "serve JS with brotli support", @@ -137,6 +141,7 @@ func TestStaticHandler_Integration(t *testing.T) { wantType: "application/javascript", wantEncoding: "br", wantCacheHeader: "public, max-age=31536000", + wantVary: "Accept-Encoding", }, { name: "prefer brotli over gzip when both supported", @@ -147,6 +152,7 @@ func TestStaticHandler_Integration(t *testing.T) { wantType: "application/javascript", wantEncoding: "br", wantCacheHeader: "public, max-age=31536000", + wantVary: "Accept-Encoding", }, { name: "fallback to gzip when brotli not available", @@ -157,6 +163,7 @@ func TestStaticHandler_Integration(t *testing.T) { wantType: "application/javascript", wantEncoding: "br", wantCacheHeader: "public, max-age=31536000", + wantVary: "Accept-Encoding", }, } @@ -183,6 +190,10 @@ func TestStaticHandler_Integration(t *testing.T) { if tc.wantCacheHeader != "" { assert.Equal(t, tc.wantCacheHeader, w.Header().Get("Cache-Control")) } + + if tc.wantVary != "" { + assert.Equal(t, tc.wantVary, w.Header().Get("Vary")) + } } }) }