仅当从javascript发布到s3时才获得403响应?所有其他方法都很好

仅当从javascript发布到s3时才获得403响应?所有其他方法都很好,javascript,amazon-s3,Javascript,Amazon S3,这件事我很困惑。我正试图将一些数据直接从客户端发布到S3,而不是让我的web服务器陷入困境。我正在使用Python和boto库生成签名,并使用javascript将所有内容转换到S3 我遇到的问题是,每当我发送请求时,javascript都会给我以下错误: 我们计算的请求签名与您的签名不匹配 假如检查您的密钥和签名方法 我已经验证了a我的密钥是有效的,b我确实可以从S3上传/下载东西。为此,我通过Python上传了一些小测试文件,并使用了普通的ol'curl 我的基本设置如下: js读取网站上的

这件事我很困惑。我正试图将一些数据直接从客户端发布到S3,而不是让我的web服务器陷入困境。我正在使用Python和boto库生成签名,并使用javascript将所有内容转换到S3

我遇到的问题是,每当我发送请求时,javascript都会给我以下错误:

我们计算的请求签名与您的签名不匹配 假如检查您的密钥和签名方法

我已经验证了a我的密钥是有效的,b我确实可以从S3上传/下载东西。为此,我通过Python上传了一些小测试文件,并使用了普通的ol'curl

我的基本设置如下:

js读取网站上的表单数据 向我的web服务器发出请求以获取上载url 使用url向S3发出ajax post请求 服务器端非常简单。它只是弹出一个用于上传的url:

c = boto.connect_s3(settings.S3_ACCESS_KEY, settings.S3_AWS_SECRET_ACCESS_KEY)
c.generate_url(5000, 'PUT', settings.S3_BUCKET, 'mycoolkey')
它会吐出这样的东西:

https://mytestbucket.s3.amazonaws.com/mycoolkey?Signature=OX6vJCNjb4Pz3Fuzh0840qCnY5U%3D&Expires=1415394562&AWSAccessKeyId=MYACCESSKEY
这个输出与我在curl中使用的相同,用于验证我是否可以实际发布到S3

所以,这一切都很好,直到我尝试通过Javascript做同样的事情

$.ajax({
              url: 'https://mytestbucket.s3.amazonaws.com/mycoolkey?Signature=OX6vJCNjb4Pz3Fuzh0840qCnY5U%3D&Expires=1415394562&AWSAccessKeyId=MYACCESSKEY',
              type: 'PUT',
              data: 'sometestdata',
              success: function() {
                  console.log('Uploaded data successfully.');
              }
            });
我已经在S3中设置了CORS设置,以便在测试时允许来自所有域的所有内容,并且据我所知,js应该发出与curl相同的请求。。所以有什么好处

当两个请求使用完全相同的URL时,为什么一个请求失败,而另一个请求成功

$.ajax({
              url: 'https://mytestbucket.s3.amazonaws.com/mycoolkey?Signature=OX6vJCNjb4Pz3Fuzh0840qCnY5U%3D&Expires=1415394562&AWSAccessKeyId=MYACCESSKEY',
              type: 'PUT',
              data: 'sometestdata',
              success: function() {
                  console.log('Uploaded data successfully.');
              }
            });