我对使用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"。
答案 0 :(得分:0)
如果我理解你的话,我会说这是CloudFront的Request Headers缓存设置问题......
默认情况下, CloudFront 在边缘位置缓存对象时不考虑标头。如果您的源返回两个对象,并且它们仅与请求标头中的值不同,则CloudFront仅缓存该对象的一个版本。
- Source。
因此,转到发布并编辑行为,以允许CloudFront根据Origin
标题的值缓存对象:
建立新设置后,为受影响的文件创建 Invalidation 。