Update weed/s3api/s3api_object_handlers.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
Chris Lu
2025-07-14 23:25:08 -07:00
committed by GitHub
co-authored by Copilot
parent 456c3ce717
commit 43bd62d661
+16 -7
View File
@@ -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)