【发布时间】:2018-06-20 02:00:04
【问题描述】:
我在 eu-west-1 区域中有一个 S3 存储桶,我们称之为 my-bucket。
在那个桶里有一张照片,我们叫它some-file.jpg。
如果我通过浏览器访问这两个 url,我可以检索到该图片(存储桶中的所有对象都是公开的)(请记住,这些是示例,而不是真实的 url):
https://my-bucket.s3.amazonaws.com/some-file.jpg
https://s3-eu-west-1.amazonaws.com/my-bucket/some-file.jpg
但是,我正在尝试获取有关该图片的一些信息,为此我使用了充满活力的.js,它会尝试检索文件。
但是,当 url 为:https://my-bucket.s3.amazonaws.com/some-file.jpg 时,它会失败,并出现以下 CORS 错误:
Access to Image at 'https://my-bucket.s3.amazonaws.com/some-file.jpg' from origin 'https://example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://example.com' is therefore not allowed access
我已确保存储桶的 CORS 政策接受所有来源:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
我的猜测是https://s3-eu-west-1.amazonaws.com/my-bucket/some-file.jpg 发送Access-Control-Allow-Origin 而另一个没有。我该如何解决这个问题?
【问题讨论】:
-
问题可能不在于 URL——这可能是巧合。如果您清除浏览器的缓存,您应该会发现它们的行为相同,并且都不起作用。 S3 历来有一个问题,当您像这样两次请求对象时会出现问题,一次来自 HTML,一次来自 JavaScript,在 serverfault.com/a/856948/15316 中有更完整的描述。该问题提到了 CloudFront,但问题的出现与您是否使用 CloudFront 无关。
标签: javascript amazon-s3 cors