Cloudfront CORS仅适用于子域

问题描述 投票:1回答:1

使用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

变化:原点,访问控制请求标题,

访问控制请求法

但是当我尝试使用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”。

nginx amazon-s3 cors cdn
1个回答
0
投票

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

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

- Source

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

CF Headers Cache Configuration

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

© www.soinside.com 2019 - 2024. All rights reserved.