注意:此问题与firefox无法从跨域服务器下载字体有关
来源:mozilla
在Gecko中,Web字体受到相同的域限制(字体文件必须与使用它们的页面位于同一域中),除非使用HTTP访问控制来放宽此限制。注意:由于TrueType,OpenType和WOFF字体没有定义的MIME类型,因此不会考虑指定文件的MIME类型。
我有一个rails应用程序,从亚马逊云端获取资产。反过来,CloudFront从s3存储桶中获取资产。我在production.rb中定义了asset_host,以便从cloudfront url中获取资产。
config.action_controller.asset_host = "//d582x5cj7qfaa.cloudfront.net"
因为我正在服务来自不同域的资产,即云端。在Firefox的情况下我无法下载字体。我遇到this并应用了答案中给出的相同逻辑,但我仍然无法下载字体。这背后的原因是,由于我有多个域(例如:abc.almaconnect.com,xyz.almaconnect.com)使用相同的云端URL来访问字体,因此云端服务器会缓存在第一个请求中发送的服务器头即使请求的域名下次不同,也会返回相同的标题。 然后我遇到了this链接,这解决了我的缓存标题问题,即如果我将查询字符串与url一起传递它应该正常工作
我的问题是,如何通过url动态追加query_string?由于多个域使用相同的应用程序,我需要实时方法来追加查询字符串。我该怎么做?
供参考: 这是我在亚马逊s3存储桶中使用的CORS配置,cloudfront网址使用它来为资产提供服务:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*.almaconnect.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Content-*</AllowedHeader>
<AllowedHeader>Host</AllowedHeader>
</CORSRule>
</CORSConfiguration>
这就是我如何知道在没有将query_string附加到url的情况下会发生什么:
curl -i -H "Origin: https://niet.almaconnect.com" https://d582x5cj7qfaa.cloudfront.net/assets/AlmaConnect-Icons-d059ef02df0837a693877324e7fe1e84.ttf?https_niet.almaconnect.com
何时使用具有不同来源的相同curl请求,而不附加query_string,返回的响应包含第一个请求中使用的原始标头。