From 74189ed60295a1ea7ad84e4d945871ca1d34830a Mon Sep 17 00:00:00 2001 From: wood chen Date: Sun, 17 Nov 2024 10:41:26 +0800 Subject: [PATCH] feat(internal/handler): optimize image request handling by setting optimized Accept headers and Cloudflare-specific headers --- internal/handler/proxy.go | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/internal/handler/proxy.go b/internal/handler/proxy.go index 94be50b..85e9a1d 100644 --- a/internal/handler/proxy.go +++ b/internal/handler/proxy.go @@ -111,19 +111,38 @@ func (h *ProxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { copyHeader(proxyReq.Header, r.Header) // 特别处理图片请求 - if utils.IsImageRequest(r.URL.Path) { - // 获取 Accept 头 - accept := r.Header.Get("Accept") + // if utils.IsImageRequest(r.URL.Path) { + // // 获取 Accept 头 + // accept := r.Header.Get("Accept") - // 根据 Accept 头设置合适的图片格式 - if strings.Contains(accept, "image/avif") { - proxyReq.Header.Set("Accept", "image/avif") - } else if strings.Contains(accept, "image/webp") { - proxyReq.Header.Set("Accept", "image/webp") + // // 根据 Accept 头设置合适的图片格式 + // if strings.Contains(accept, "image/avif") { + // proxyReq.Header.Set("Accept", "image/avif") + // } else if strings.Contains(accept, "image/webp") { + // proxyReq.Header.Set("Accept", "image/webp") + // } + + // // 设置 Cloudflare 特定的头部 + // proxyReq.Header.Set("CF-Image-Format", "auto") // 让 Cloudflare 根据 Accept 头自动选择格式 + // } + // 特别处理图片请求 + if utils.IsImageRequest(r.URL.Path) { + // 设置优化的 Accept 头 + accept := r.Header.Get("Accept") + if accept != "" { + proxyReq.Header.Set("Accept", accept) + } else { + proxyReq.Header.Set("Accept", "image/avif,image/webp,image/jpeg,image/png,*/*;q=0.8") } // 设置 Cloudflare 特定的头部 - proxyReq.Header.Set("CF-Image-Format", "auto") // 让 Cloudflare 根据 Accept 头自动选择格式 + proxyReq.Header.Set("CF-Accept-Content", "image/avif,image/webp") + proxyReq.Header.Set("CF-Optimize-Images", "on") + + // 删除可能影响缓存的头部 + proxyReq.Header.Del("If-None-Match") + proxyReq.Header.Del("If-Modified-Since") + proxyReq.Header.Set("Cache-Control", "no-cache") } // 设置其他必要的头部