Amazon web services AWS规范化请求头列表的更具体规则?

Amazon web services AWS规范化请求头列表的更具体规则?,amazon-web-services,canonicalization,Amazon Web Services,Canonicalization,AWS文件似乎有一些混乱、不完整或矛盾的信息。它说 CanonicalHeaders是请求头及其值的列表 这表明我们将所有请求头都放在规范请求中。然而,后来,他们说 CanonicalHeaders列表必须包括以下内容: HTTP主机头 如果请求中存在内容类型标头,则必须将其添加到CanonicalHeaders列表中 还必须添加您计划包含在请求中的任何x-amz-*头。例如,如果您使用的是临时安全凭据,那么您将在请求中包含x-amz-security-token。必须将此标题添加到Canoni

AWS文件似乎有一些混乱、不完整或矛盾的信息。它说

CanonicalHeaders是请求头及其值的列表

这表明我们将所有请求头都放在规范请求中。然而,后来,他们说

CanonicalHeaders列表必须包括以下内容:

HTTP主机头

如果请求中存在内容类型标头,则必须将其添加到CanonicalHeaders列表中

还必须添加您计划包含在请求中的任何x-amz-*头。例如,如果您使用的是临时安全凭据,那么您将在请求中包含x-amz-security-token。必须将此标题添加到CanonicalHeader列表中

好的,关于内容类型和x-amz头的部分表明,我们实际上并不获取所有头,因为否则它们不需要声明它们必须包含在内。因此,我们可能只需要使用
主机
头、
内容类型
头和任何
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 
但这与前面的两种解释不一致:如果我们只应该有
内容类型
主机
x-amz-*
头,那么
范围
头在列表中做什么?如果我们只需要获取所有的标题,那么为什么列表中没有
Date
标题呢

如果要放入规范请求的头列表至少包含最小头,那么它是任意的吗?构造规范化请求头的最终规则集究竟是什么

如果我们应该只有内容类型、主机和x-amz-*头, 那么,范围标头在列表中的作用是什么

您只需要具有内容类型、主机和x-amz-*,但可以添加其他要添加到要验证的签名中的标题

见上面的注释:“为了计算签名,只需要主机和任何X-AMZ-*报头;但是,为了防止数据篡改,您应该考虑签名计算中的所有报头。”

如果我们只需要获取所有的标题,那么为什么不呢 列表中的日期标题

日期标头是特殊的,因为它是由浏览器根据可能不正确的客户端系统时间添加的。因此,您可以使用x-amz-date

是要放入规范请求的头的列表,然后是任意的, 只要它至少包含最小标题

对!

究竟是什么样的一套确定的规则来构建 规范化请求头

这将是……文件中定义的内容。。。但是您得到了这样的想法:您必须对请求数据的最小集合进行签名,并且可以对您想要的所有头进行签名


也就是说,尽可能避免这一切。用于[Javascript、Java、.NET、Python、Ruby、PHP,…]的SDK已经为您签署请求,管理临时凭证、凭证链、线程、重试等。如果你能使用它,可能会省去很多头痛。

非常感谢!不幸的是,我需要知道,因为我正在构建自己的实现。我使用的是Haskell,现有的实现都不符合我的需要。这很好!哈斯克尔