0

我正在为 SQS SendMessage 操作构建自己的 REST 调用。SendMessage 的所有参数都在请求正文中。(QueueUrl、Action 和 MessageBody)。

我创建了自己的签名计算代码(主要从 AWS SDK Java 复制)。

现在,当我的 MessageBody="HelloWorld" ,它工作正常。这意味着我的签名计算和凭据是正确的。

但是,当我插入空格 MessageBody="Hello World" 时,我收到了来自 SQS 的 403 SignatureDoesNotMatch 错误。我还尝试将 "Hello%20World" 作为 MessageBody ,但这也返回 403 错误。

还尝试了“Hello+World”。但是得到了同样的错误。

我发现 aws sdk 在计算有效负载的哈希之前将空格转换为“+”。

我试过 MessageBody="Hello.World" 并且效果很好。

消息正文中的空格有什么问题吗?

我将 Host 和 x-amz-date 作为我请求中的唯一标头发送。

来自 SQS 的错误响应表明负载的哈希是实际和预期的规范请求中唯一不同的东西。

4

0 回答 0