2014年9月10日更新:
由于CloudFront现在可以正确支持CORS,因此您不再需要执行下面的任何查询字符串删减操作.有关更多信息,请参阅http://aws.amazon.com/blogs/aws/enhanced-cloudfront-customization/和此答案:https://stackoverflow.com/a/25305915/308315
好了,我终于使用下面的配置对文档中的示例进行了一些调整,使字体正常工作.
我的字体托管在S3上,但前面是CloudFront.
我不知道它为什么能用,我猜可能需要<AllowedMethod>
GET
和<AllowedHeader>
Content-*
.
如果任何精通Amazon S3 CORS配置的人都能对此有所了解,我们将不胜感激.
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>https://mydomain.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Content-*</AllowedHeader>
<AllowedHeader>Host</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>https://*.mydomain.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Content-*</AllowedHeader>
<AllowedHeader>Host</AllowedHeader>
</CORSRule>
</CORSConfiguration>
编辑:
一些开发人员面临着缓存Access-Control-Allow-Origin
头的CloudFront问题.AWS员工已在下面的链接(https://forums.aws.amazon.com/thread.jspa?threadID=114646)(@Jeff-Atwood comments )中解决了此问题.
在链接线程中,建议使用Query String来区分来自不同域的调用,作为一种解决方法.我将在这里复制缩短的示例.
使用curl
判断响应报头:
域名A:a.domain.com
curl -i -H "Origin: https://a.domain.com" http://hashhashhash.cloudfront.net/font.woff?https_a.domain.com
来自域A的响应标头:
Access-Control-Allow-Origin: https://a.domain.com
Access-Control-Allow-Methods: GET
Access-Control-Max-Age: 3000
Access-Control-Allow-Credentials: true
X-Cache: Miss from Cloudfront
域B:域B.通用域名格式
curl -i -H "Origin: http://b.domain.com" http://hashhashhash.cloudfront.net/font.woff?http_b.domain.com
来自域B的响应头:
Access-Control-Allow-Origin: http://b.domain.com
Access-Control-Allow-Methods: GET
Access-Control-Max-Age: 3000
Access-Control-Allow-Credentials: true
X-Cache: Miss from Cloudfront
您会注意到Access-Control-Allow-Origin
返回了不同的值,这些值已经通过了Cloudfront缓存.