From 3b448abcbd524fe6e883f0157a2615f21142c4f9 Mon Sep 17 00:00:00 2001 From: Trey t Date: Sat, 6 Dec 2025 10:55:32 -0600 Subject: [PATCH] Fix ETag 304 Not Modified by stripping W/ prefix from client header MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reverse proxy adds W/ prefix to ETags, but cache stores them without it. Strip the prefix from client's If-None-Match header before comparing. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- internal/handlers/static_data_handler.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/handlers/static_data_handler.go b/internal/handlers/static_data_handler.go index 89dacf0..513133c 100644 --- a/internal/handlers/static_data_handler.go +++ b/internal/handlers/static_data_handler.go @@ -2,6 +2,7 @@ package handlers import ( "net/http" + "strings" "github.com/gin-gonic/gin" "github.com/redis/go-redis/v9" @@ -55,7 +56,8 @@ func (h *StaticDataHandler) GetStaticData(c *gin.Context) { ctx := c.Request.Context() // Check If-None-Match header for conditional request - clientETag := c.GetHeader("If-None-Match") + // Strip W/ prefix if present (added by reverse proxy, but we store without it) + clientETag := strings.TrimPrefix(c.GetHeader("If-None-Match"), "W/") // Try to get cached ETag first (fast path for 304 responses) if h.cache != nil && clientETag != "" {