【问题标题】:AWS Javascript SDK CORS errorAWS Javascript SDK CORS 错误
【发布时间】:2014-09-01 00:39:29
【问题描述】:

我在浏览器中使用适用于 JavaScript 的 AWS 开发工具包和 S3。在以下代码中,第一次调用 getSignedUrl 工作正常,但第二次调用 getObject 失败并出现 CORS 错误 - Access-Control-Allow-Origin 不允许来源。

有人知道我犯了什么明显、简单和愚蠢的错误吗?

AWS.config.update({accessKeyId: 'AAAAAAAAAAAA', secretAccessKey: 'ZZZZZZZZZ'});
 var s3 = new AWS.S3();
 var params = {Bucket: 'myBucket', Key: 'path/to/this/file.json'};

//this works...
 var url = s3.getSignedUrl('getObject', params);
 console.log(url);

//this doesn't...
 var obj = s3.getObject(params, function (error, data) {
  if (error) {
    console.log(error); // an error occurred
 } else {
    console.log(data); // request succeeded
}
});

【问题讨论】:

    标签: javascript amazon-web-services amazon-s3 cors


    【解决方案1】:

    我发现问题来自默认为 allowedheaders = Authorized 的 S3 CORS 设置。用 * 替换它就可以了。这是由 S3 抱怨它没有收到授权请求引起的。

    【讨论】:

      【解决方案2】:

      那将是您的浏览器说,由于same-origin policy,它无法向 S3 发出请求。

      您可以enable CORS on your bucket 解决这个问题。

      getSignedUrl 调用工作正常,因为它完全由 SDK“离线”完成(S3 API 中没有这样的调用)。

      【讨论】:

      • 这似乎是一个身份验证问题。当我将存储桶 CORS 策略设置为 * 时,它可以工作,但使用 Authorization 它会失败。此外,如果 accessKeyId 或 secretAccessKey 错误,getSignedUrl 调用也会失败。
      • 而在S3 API中其实有这样的调用!
      猜你喜欢
      • 2021-08-06
      • 2016-05-02
      • 2015-10-15
      • 1970-01-01
      • 2020-08-11
      • 2022-06-30
      • 2019-10-10
      • 2018-09-21
      • 2016-01-29
      相关资源
      最近更新 更多