Cloudfront CORS仅适用于子域
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cloudfront CORS仅适用于子域相关的知识,希望对你有一定的参考价值。
使用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”。
如果我理解你的话,我会说这是CloudFront的Request Headers缓存设置的问题......
默认情况下,CloudFront在边缘位置缓存对象时不考虑标头。如果您的源返回两个对象,并且它们仅与请求标头中的值不同,则CloudFront仅缓存该对象的一个版本。
- Source。
因此,转到您的分发并编辑您的行为,以允许CloudFront根据Origin
标头的值缓存对象:
建立新设置后,为受影响的文件创建Invalidation。
以上是关于Cloudfront CORS仅适用于子域的主要内容,如果未能解决你的问题,请参考以下文章
Web API 2 - CORS 仅适用于 HTTPS(而非 HTTP)
从 CloudFront 到服务器的 CORS 问题以获取字体