aboutsummaryrefslogtreecommitdiff
path: root/weed/s3api/s3err/error_handler.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/s3api/s3err/error_handler.go')
-rw-r--r--weed/s3api/s3err/error_handler.go31
1 files changed, 20 insertions, 11 deletions
diff --git a/weed/s3api/s3err/error_handler.go b/weed/s3api/s3err/error_handler.go
index 81335c489..24dcfad7f 100644
--- a/weed/s3api/s3err/error_handler.go
+++ b/weed/s3api/s3err/error_handler.go
@@ -78,24 +78,33 @@ func setCommonHeaders(w http.ResponseWriter, r *http.Request) {
w.Header().Set("x-amz-request-id", fmt.Sprintf("%d", time.Now().UnixNano()))
w.Header().Set("Accept-Ranges", "bytes")
- // Only set static CORS headers for service-level requests, not bucket-specific requests
+ // Handle CORS headers for requests with Origin header
if r.Header.Get("Origin") != "" {
// Use mux.Vars to detect bucket-specific requests more reliably
vars := mux.Vars(r)
bucket := vars["bucket"]
isBucketRequest := bucket != ""
- // Only apply static CORS headers if this is NOT a bucket-specific request
- // and no bucket-specific CORS headers were already set
- if !isBucketRequest && w.Header().Get("Access-Control-Allow-Origin") == "" {
- // This is a service-level request (like OPTIONS /), apply static CORS
- w.Header().Set("Access-Control-Allow-Origin", "*")
- w.Header().Set("Access-Control-Allow-Methods", "*")
- w.Header().Set("Access-Control-Allow-Headers", "*")
- w.Header().Set("Access-Control-Expose-Headers", "*")
- w.Header().Set("Access-Control-Allow-Credentials", "true")
+ if !isBucketRequest {
+ // Service-level request (like OPTIONS /) - apply static CORS if none set
+ if w.Header().Get("Access-Control-Allow-Origin") == "" {
+ w.Header().Set("Access-Control-Allow-Origin", "*")
+ w.Header().Set("Access-Control-Allow-Methods", "*")
+ w.Header().Set("Access-Control-Allow-Headers", "*")
+ w.Header().Set("Access-Control-Expose-Headers", "*")
+ w.Header().Set("Access-Control-Allow-Credentials", "true")
+ }
+ } else {
+ // Bucket-specific request - preserve existing CORS headers or set default
+ // This handles cases where CORS middleware set headers but auth failed
+ if w.Header().Get("Access-Control-Allow-Origin") == "" {
+ // No CORS headers were set by middleware, so this request doesn't match any CORS rule
+ // According to CORS spec, we should not set CORS headers for non-matching requests
+ // However, if the bucket has CORS config but request doesn't match,
+ // we still should not set headers here as it would be incorrect
+ }
+ // If CORS headers were already set by middleware, preserve them
}
- // For bucket-specific requests, let the CORS middleware handle the headers
}
}