通过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)
答案 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