content_hash = rgw::auth::s3::calc_v4_payload_hash(opt_content->to_str());
extra_headers["x-amz-content-sha256"] = content_hash;
} else {
+ // check if the header was already set (e.g. from a forwarded request)
+ const char* existing_hash = info.env->get("HTTP_X_AMZ_CONTENT_SHA256");
+ if (existing_hash) {
+ // use existing header value
+ extra_headers["x-amz-content-sha256"] = existing_hash;
+ } else {
/* Some S3-compatible services require x-amz-content-sha256 header to always
* be present and included in the signature, even for unsigned payload.
* AWS S3 specification states that this header is required for all requests. */
extra_headers["x-amz-content-sha256"] = AWS4_UNSIGNED_PAYLOAD_HASH;
+ }
}
/* craft canonical headers */