首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Amazon规范的URL编码查询字符串

基于Amazon规范的URL编码查询字符串
EN

Stack Overflow用户
提问于 2015-05-06 12:30:17
回答 1查看 2.4K关注 0票数 2

我目前正在实现一个生成Amazon签名版本4签名的应用程序(有关签名过程的详细信息,请参阅以下页面:http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html)。方便的是,Amazon还为这些签名提供了测试套件。然而,有一个测试案例,我无法真正弄清楚。请注意,我的问题仅涉及签名过程的第一步(生成规范请求),特别是创建规范查询字符串。

测试用例输入HTTP请求如下所示:

代码语言:javascript
复制
POST /?@#$%^&+=/,?><`";:\|][{} =@#$%^&+=/,?><`";:\|][{}  http/1.1
Date:Mon, 09 Sep 2011 23:36:00 GMT
Host:host.foo.com

这是规范请求的预期结果:

代码语言:javascript
复制
POST
/
%20=%2F%2C%3F%3E%3C%60%22%3B%3A%5C%7C%5D%5B%7B%7D&%40%23%24%25%5E=
date:Mon, 09 Sep 2011 23:36:00 GMT
host:host.foo.com

date;host
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

规范请求中的第三行表示url编码的查询字符串。但是,即使遵循Sig V4文档中所述的规则,我也不太明白它们是如何从输入中获得的:

若要构造规范查询字符串,请完成以下步骤:

URI-根据以下规则编码每个参数名称和值:

不要对RFC 3986定义的任何未保留字符进行URL编码:

A-Z,a-z,0-9,连字符(- ),下划线(_ ),句点(.)),和倾斜(~ )。%-用%XY编码所有其他字符,其中X和Y是十六进制字符(0-9和大写A-F)。

例如,空格字符必须编码为%20 (不像某些编码方案那样使用'+‘),扩展的UTF-8字符必须是%XY%ZA%BC格式。

根据字符代码(即严格的ASCII顺序)对编码的参数名称进行排序。例如,以大写字母F (ASCII代码70)开头的参数名先于以小写字母b (ASCII代码98)开头的参数名称。

通过从排序列表中的第一个参数名称开始构建规范查询字符串。

对于每个参数,追加URI编码的参数名称,后面跟着字符'=‘(ASCII代码61),然后是URI编码的参数值。对没有值的参数使用空字符串。

在每个参数值之后追加字符'&‘(ASCII代码38),但列表中的最后一个值除外。

有人能解释一下吗?提前谢谢一堆人!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-06 13:21:22

我想我可能已经搞清楚了。将查询字符串@#$%^&+=/,?><``";:\|][{} =@#$%^&+=/,?><``";:\|][{}分解为键/值对(按外观顺序排列):

  1. @#$%^,值为None
  2. +,值/,?><``";:\|][{}
  3. @#$%^,值为None
  4. +,值/,?><``";:\|][{}

基于https://stackoverflow.com/a/1746566/3108853,没有关于如何处理重复键的标准,因此看起来亚马逊只是选择忽略或覆盖(这个测试用例无法判断,因为重复键的值是相同的)。

最后,考虑到第二次出现=之前的@#$%^,我认为它被解析为具有null键值的键/值对,因此它将全部删除。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30076788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档