我试图让我的网站用户能够从Amazon S3下载文件。 URL在我的网络服务器上由我的AWS私钥进行数字签名,而不是通过AJAX发送到客户端并嵌入到html表单的action属性中。
提交表单时出现问题。表单的action属性包含一个具有数字签名的url。此签名通常包含+
个符号,这些符号可以进行百分比编码。它完全使签名无效。如何保持表格不受编码我的网址?
答案 0 :(得分:1)
我(尊敬地)建议你需要更仔细地确定问题的确切性质,在流程中它崩溃的地方,并确切地确定你实际需要修复的是什么。对于浏览器来说,“+”的URLEncoding是正确的,因为查询字符串中的文字“+”被服务器正确解释为“”(空格)。
您的问题促使我查看我编写的代码,为S3生成已签名的网址,我的回忆是正确的 - 我正在将'+'更改为%2B,'='更改为%3D,并将'/'更改为签名中的%2F ...所以这不是无效的。这假设我们正在谈论同样的事情,这样你在问题中提到的“数字签名”就是这里讨论的签名:
注意示例中的签名中包含urlencoded'+':Signature = vjbyPxybdZaNmGa %2B yT272YEAiv4%3D
我会推测你遇到的问题可能不是'+'→'%2B'(这应该不仅是有效的,而是必需的)......但也许它是双重编码,这样你就是,在某些时候,对它进行双重编码,使'+'→'%2B'→'%252B'...将百分号编码为文字,这将破坏签名。