From 43bd62d661cd664c75eb26bffb4c549de7fdca23 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Mon, 14 Jul 2025 23:25:08 -0700 Subject: [PATCH] Update weed/s3api/s3api_object_handlers.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- weed/s3api/s3api_object_handlers.go | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/weed/s3api/s3api_object_handlers.go b/weed/s3api/s3api_object_handlers.go index 1a9142b9f..bfd6886a6 100644 --- a/weed/s3api/s3api_object_handlers.go +++ b/weed/s3api/s3api_object_handlers.go @@ -392,14 +392,25 @@ func setUserMetadataKeyToLowercase(resp *http.Response) { } } -func passThroughResponse(proxyResponse *http.Response, w http.ResponseWriter) (statusCode int, bytesTransferred int64) { - // Capture existing CORS headers that may have been set by middleware - capturedCORSHeaders := make(map[string]string) +func captureCORSHeaders(w http.ResponseWriter, corsHeaders []string) map[string]string { + captured := make(map[string]string) for _, corsHeader := range corsHeaders { if value := w.Header().Get(corsHeader); value != "" { - capturedCORSHeaders[corsHeader] = value + captured[corsHeader] = value } } + return captured +} + +func restoreCORSHeaders(w http.ResponseWriter, capturedCORSHeaders map[string]string) { + for corsHeader, values := range capturedCORSHeaders { + w.Header()[corsHeader] = values + } +} + +func passThroughResponse(proxyResponse *http.Response, w http.ResponseWriter) (statusCode int, bytesTransferred int64) { + // Capture existing CORS headers that may have been set by middleware + capturedCORSHeaders := captureCORSHeaders(w, corsHeaders) // Copy headers from proxy response for k, v := range proxyResponse.Header { @@ -407,9 +418,7 @@ func passThroughResponse(proxyResponse *http.Response, w http.ResponseWriter) (s } // Restore CORS headers that were set by middleware - for corsHeader, values := range existingCORSHeaders { - w.Header()[corsHeader] = values - } + restoreCORSHeaders(w, capturedCORSHeaders) if proxyResponse.Header.Get("Content-Range") != "" && proxyResponse.StatusCode == 200 { w.WriteHeader(http.StatusPartialContent)