Cloudfront CORS仅适用于子域

时间:2017-08-06 02:50:14

标签: nginx amazon-s3 cors cdn

我对使用Cloudfront + S3的CORS有一种非常奇怪的行为

当我跑步时

curl -I -s -X GET -H "Origin: https://myapp.com" https://s3.amazonaws.com/myapp/assets/fontawesome-webfont.woff | grep Access

curl -I -s -X GET -H "Origin: https://**www.**myapp.com" https://s3.amazonaws.com/myapp/assets/fontawesome-webfont.woff | grep Access

两者都按预期返回值:

  

Access-Control-Allow-Origin:https://musicjungle.com.br

     

Access-Control-Allow-Methods:GET Access-Control-Expose-Headers:ETag

     

Access-Control-Max-Age:3000 Access-Control-Allow-Credentials:true

     

Vary:Origin,Access-Control-Request-Headers,

     

访问控制请求-方法

但是当我尝试使用Cloudfront URL运行相同的curl时,只需www子域工作

curl -I -s -X GET -H "Origin: https://www.myapp.com" https://d1bfllp5zjnl7u.cloudfront.net/assets/fontawesome-webfont.woff | grep Access
  

Access-Control-Allow-Origin:https://www.musicjungle.com.br

     

访问控制 - 允许 - 方法:GET,PUT,POST,DELETE,HEAD

     

Access-Control-Max-Age:3000 Access-Control-Allow-Credentials:true

以下命令不会按预期返回标题

curl -I -s -X GET -H "Origin: https://myapp.com" https://d1bfllp5zjnl7u.cloudfront.net/assets/fontawesome-webfont.woff | grep Access

任何想法为什么会发生这种情况?我已经在S3 CORS配置上允许两个服务器使用Origin(我们可以在上面看到),但它似乎是Cloudfront配置上的东西,只允许" www.myapp.com"。

1 个答案:

答案 0 :(得分:0)

如果我理解你的话,我会说这是CloudFront的Request Headers缓存设置问题......

  

默认情况下, CloudFront 在边缘位置缓存对象时不考虑标头。如果您的源返回两个对象,并且它们仅与请求标头中的值不同,则CloudFront仅缓存该对象的一个​​版本。

- Source

因此,转到发布并编辑行为,以允许CloudFront根据Origin标题的值缓存对象:

CF Headers Cache Configuration

建立新设置后,为受影响的文件创建 Invalidation