我正在尝试做的事情: 最终:我想从浏览器扩展(Safari、Chrome)填充 AWS Kinesis 流。 我需要使用签名流程 (v4) 将请求发送到 AWS;这涉及设置 header 并对其进行加密(在使用 aws key 的远程服务器上)以最终将它们加入到请求中。
亚马逊请求显式定义 header “Host”... 然而,Javascript 严格禁止设置它(以及许多其他设置,有充分的理由)
我一定错过了一些东西——我该怎么做?
来源: http://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html - 该示例是用 Python 编写的,但它显示了他们打算如何在服务器端使用 Host header
注释:我目前正在使用 POST;描述 GET 和查询字符串的示例注释也提到了“Host”:它必须作为请求中的 header 存在
另外:使用类似的设置,我设法将文件从客户端直接上传到 S3 存储桶 - 自动授权过程略有不同(不需要“主机”)。
最佳答案
执行时,Host:
header 将由 JS XHR 本身从给定的 URL 中填充和解析,与 curl
相同,例如
curl -v -X POST http://example.org/foo
...将自动添加 header Host: example.org
...
对于 AWS,您仍然需要将其添加到 canonical_headers
列表中进行签名(并且全部小写),如链接示例中所述。但这部分与实际建立连接无关。
关于javascript - AWS API 使用 Javascript 签署 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28326752/