S3上传返回403 SignatureDoesNotMatch

时间:2013-08-15 07:50:46

标签: http amazon-web-services amazon-s3 http-headers amazon-cloudfront

通过HTTP PUT请求上传到S3。这是我的请求参数:

AWSAccessKeyId=AKIAIHRUBWYK7YNNWSLQ&
Expires=1376556204&
x-amz-meta-cachecontrol:max-age=315360000&
Signature=y7%2F96eP5OXWsqjRSh81T6WNHe%2FQ%3D

这给了我一个回复403 SignatureDoesNotMatch。原因在于响应体,它告诉我它试图匹配的字符串是:

PUT

image/png
1376556204
x-amz-meta-cachecontrol:max-age:315360000
/test199801672/608ad506f948b52ab130467a7df99381.png

请注意 max-age 后面有冒号。我从未传过冒号!我通过了 = 。我做错了什么?

这是我的完整请求(减去正文):

PUT /608ad506f948b52ab130467a7df99381.png?AWSAccessKeyId=AKIAIHRUBWYK7YNNWSLQ&Expires=1376556204&x-amz-meta-cachecontrol:max-age=315360000&Signature=y7%2F96eP5OXWsqjRSh81T6WNHe%2FQ%3D HTTP/1.1
Host: test199801672.s3.amazonaws.com
Accept: */*
Accept-Encoding: gzip, deflate
Content-Length: 636109
Content-Type: image/png
Accept-Language: en;q=1, fr;q=0.9, de;q=0.8, ja;q=0.7, nl;q=0.6, it;q=0.5
Connection: keep-alive
User-Agent: Spentit/88 (iPhone Simulator; iOS 6.1; Scale/2.00)

1 个答案:

答案 0 :(得分:0)

你的s3签名需要在你试图传递给s3的同一个params上签名,所以如果你有签名错误,那么我会确保你的s3签名正在签署正确的政策。

亚马逊元数据cache-control param x-amz-meta-Cache-Control您拥有x-amz-meta-cachecontrol。但更重要的是,您需要传递max-age=315360000的值。您需要转义值中的=,否则它将被解析为max-age - >想要315360000时的x-amz-meta-Cache-Control - > max-age=315360000

在您的PUT请求中,您可以在查询字符串中看到您提交的x-amz-meta-cachecontrol:max-age - > 315360000