1

通过 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)
4

1 回答 1

1

您的 s3 签名需要在您尝试传递给 s3 的相同参数上签名,因此如果您遇到签名错误,那么我会确保您的 s3 签名正在签署正确的政策。

亚马逊元数据cache-control参数是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

于 2015-09-02T01:24:15.793 回答