从Amazon S3存储桶中丢失Access-Control-Allow-Origin标头

时间:2015-05-07 16:33:47

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

我的Amazon S3存储桶有以下CORS配置。问题是配置似乎完全被忽略了。从存储桶请求对象时,我没有获得任何Access-Control-Allow-Origin标头。是否有任何家庭有类似的问题或调试提示?

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>http://www.example.com</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
    <AllowedOrigin>http://localhost:8100</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>

这是我的保管政策:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "AddPerm",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::example.com/*"
    }
]}

2 个答案:

答案 0 :(得分:1)

您必须在请求中提供Origin标头,才能在响应中获取Access-Control-Allow-Origin标头。

使用curl:

$ curl -XGET -H 'Origin: www.example.com' https://my-bucket.s3.amazonaws.com/doc/2006-03-01/

请注意 - 与文档相反 - 即使您未启用&#34;静态网站托管&#34;也可以使用CORS配置。在桶上。您可以通过存储桶子域(如上所述)或通过完整路径访问存储桶:https://s3.amazonaws.com/my-bucket/doc/2006-03-01

答案 1 :(得分:0)

我不确定您为什么要添加额外的xml信息,因为我在S3文档中没有看到这些信息。简单来说,这应该有效:

<CORSConfiguration>
<CORSRule>
    <AllowedOrigin>http://www.example.com</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
    <AllowedOrigin>http://localhost:8100</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>