此处的 AWS 文档似乎有些令人困惑、不完整或相互矛盾的信息。它指出
CanonicalHeaders 是请求标头及其值的列表。
这表明我们将所有请求标头放在规范请求中。然而,后来他们表示
CanonicalHeaders 列表必须包括以下内容:
HTTP 主机标头
如果请求中存在 Content-Type 标头,则必须将其添加到 CanonicalHeaders 列表中。
还必须添加您计划包含在请求中的任何 x-amz-* 标头。例如,如果您使用临时安全凭证,您将在请求中包含 x-amz-security-token。您必须将此标头添加到 CanonicalHeaders 列表中。
好的,关于 Content-Type 和 x-amz 标头的内容表明我们实际上并未采用所有标头,因为否则它们不需要声明必须包含它们。那么也许,我们只需要获取Host
标题、Content-Type
标题和任何x-amz-*
标题。但是在下面,它变得更加混乱,因为这是一个示例请求:
GET /test.txt HTTP/1.1
Host: examplebucket.s3.amazonaws.com
Date: Fri, 24 May 2013 00:00:00 GMT
Authorization: SignatureToBeCalculated
Range: bytes=0-9
x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
x-amz-date: 20130524T000000Z
这是从它创建的示例规范请求:
GET
/test.txt
host:examplebucket.s3.amazonaws.com
range:bytes=0-9
x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
x-amz-date:20130524T000000Z
host;range;x-amz-content-sha256;x-amz-date
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
但这与之前的两种解释都不一致:如果我们应该只有Content-Type
,Host
和x-amz-*
headers,那么range
header 在列表中做什么?如果我们只是应该获取所有标题,那么为什么列表中没有Date
标题?
放入规范请求的标头列表是否是任意的,只要它至少包含最少的标头?确切地说,构建规范请求标头的最终规则集是什么?