被CORS政策阻止 - 来自Django App的S3 Bucket Access

时间:2017-07-15 16:35:39

标签: django amazon-s3 cors

我的应用程序访问S3存储桶中的字体文件时出现问题。

以下是我对S3存储桶的CORS策略:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>HEAD</AllowedMethod>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
    <ExposeHeader>ETag</ExposeHeader>
  </CORSRule>
</CORSConfiguration>

但是在访问我的网站的控制台中,我得到以下内容:

  

已被CORS政策阻止:没有'Access-Control-Allow-Origin'   标头出现在请求的资源上

1 个答案:

答案 0 :(得分:0)

我最终用白名单Access-Control-Allow-Origin配置了一个CloudFront发行版,其起源为S3,并配置了nginx以包括正确的标题。

Origin请求标头指示提取的来源。它不包含任何路径信息, 但只能使用服务器名称(例如https://www.example.com)。 有关详细信息,请参见https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin

在这里,我们设置Access-Control-Allow-Origin响应标头中包含的值。如果来源是我们已知的主机之一(通过HTTP或HTTPS服务),则允许使用CORS。否则,我们将设置为“ null”值,不允许使用CORS。

map $http_host $cors_origin {
default "null";
  "~*^\.example\.com$" "$http_x_forwarded_proto://$http_host";
}