diff --git a/s3/src/request/request_trait.rs b/s3/src/request/request_trait.rs index 9493504236..43d51a171e 100644 --- a/s3/src/request/request_trait.rs +++ b/s3/src/request/request_trait.rs @@ -741,6 +741,16 @@ pub trait Request { Command::GetObjectTagging => {} Command::GetBucketLocation => {} Command::ListBuckets => {} + // Bodyless DELETE requests must not sign Content-Length/Content-Type: + // the HTTP client never transmits them, so strict SigV4 validators + // (e.g. Cloudflare R2) reconstruct a different canonical request and + // reject with SignatureDoesNotMatch (see issue #466). + Command::DeleteObject + | Command::DeleteObjectTagging + | Command::AbortMultipartUpload { .. } + | Command::DeleteBucket + | Command::DeleteBucketCors { .. } + | Command::DeleteBucketLifecycle => {} _ => { headers.insert( CONTENT_LENGTH,