我可以生成一个有效的预先签名的URL来列出S3存储桶内容的一部分。
如果我将其粘贴到浏览器中或使用hurl.it
,它可以正常工作但是,在jQuery Ajax GET调用中,签名失败。
我在fiddler中查看了请求,它确实在请求中附加了一个参数,可能是回调。
我在hurl.it尝试了它,它也失败了。对于Amazon Signature 4来说,Ajax添加的额外参数是一个显示停止。
我会将它传递给我的服务器进行签名,但遗憾的是Ajax是事实,所以AFAIK不可能提前指定回调参数。
奇怪的是使用C#SDK生成预签名URL这个Ajax中的额外参数不是问题。但遗憾的是,SDK没有提供我所知道的用于生成预定义URL的机制来列出桶内容。只是为了获得一个对象。
因此预先签署的网址不是问题。 据我所知,标题也不是。 它似乎希望所有查询参数与我签名的匹配。
我已经在这里呆了两天了,到目前为止我已经很近了。
有经验的s3 / ajax用户的任何见解都会非常感激。
谢谢!
答案 0 :(得分:0)
对于任何遭受这种耻辱的人来说,这是我的解决方案。
我正在使用类型为“GET”的$ .ajax()调用。 额外的参数肯定是问题所在。
然后我记得jQuery中有一个$ .get()函数。
那很有效。
所以似乎$ .ajax()会添加额外参数,即使签名有效,Amazon Signature 4预先签名的URL也会失败。
但是使用$ .get()并且它会成功。
希望这可以拯救别人很多悲伤。