2

注意:此问题与firefox无法从跨域服务器下载字体有关

来源:mozilla
在 Gecko 中,网络字体受到相同的域限制(字体文件必须与使用它们的页面位于同一域中),除非使用 HTTP 访问控制来放松此限制。注意:由于没有为 TrueType、OpenType 和 WOFF 字体定义 MIME 类型,因此不考虑指定文件的 MIME 类型。

我有一个从亚马逊云端获取资产的 Rails 应用程序。CloudFront 反过来从 s3 存储桶中获取资产。我在 production.rb 中定义了 assets_host,以便从云端 url 获取资产。

config.action_controller.asset_host = "//d582x5cj7qfaa.cloudfront.net"

因为我正在为来自不同域(即云端)的资产提供服务。如果是 Firefox,我无法下载字体。我遇到了这个并应用了与答案中给出的相同的逻辑,但我仍然无法下载字体。这背后的原因是,由于我有多个域(例如:abc.almaconnect.com、xyz.almaconnect.com)使用相同的云端 url 来访问字体,所以云端服务器会缓存在第一个请求中发送的服务器标头即使下次请求的域不同,也返回相同的标头。然后我遇到了这个链接,它解决了我的缓存头问题,即如果我将查询字符串与 url 一起传递,它应该可以正常工作

我的问题是,如何通过 url 动态附加 query_string?由于多个域使用同一个应用程序,我需要实时方法来附加查询字符串。我怎么做?

供参考:这是我在 amazon s3 存储桶中使用的 CORS 配置,cloudfront url 使用它来提供资产:

<?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,返回的响应包含在第一个请求中使用的原始标头。

4

0 回答 0