首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缓存字体字体

缓存字体字体
EN

Stack Overflow用户
提问于 2011-02-26 13:27:50
回答 1查看 17.9K关注 0票数 15

我使用@字体来嵌入托管在TypeFront上的字体,但是我的字体没有被浏览器缓存(Firefox3.6.13和Epiphany 2.30.2)。这导致了Firefox上的FOUC (非样式内容的Flash )和MFOMT (短暂的缺失文本的Flash,我只是编了一个)在Epiphany上每次页面加载(第一次加载页面时我可以使用FOUC/MFOMT,但不是每次)。

如果可能的话,我试图避免将字体嵌入到Base64中,而且我自己也无法保存字体。

为什么字体没有缓存?有没有其他免费的字体托管服务没有这个问题?

测试页:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
    <head>
        <title>TypeFront Cache Test</title>
        <style>
            @font-face {
                font-family: "Journal";
                src: url("http://typefront.com/fonts/825588825.ttf") format("truetype");
            }
            h1 {
                font-family: "Journal";
            }
        </style>
    </head>
    <body>
        <h1>Test text</h1>
    </body>
</html>

如果我在Firebug中观察到,则Net选项卡显示,每次加载页面时,字体都带有"200 OK“,而不是"304未修改”或使用缓存字体的其他指示(例如,浏览器甚至不尝试HTTP请求)。

HTTP标头:

代码语言:javascript
复制
Response Headers

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 26 Feb 2011 12:57:18 GMT
Content-Type: font/ttf
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Status: 200 OK
Content-Transfer-Encoding: binary
Access-Control-Allow-Origin: *
Content-Disposition: attachment; filename="typefront_735a460727.ttf"
Cache-Control: max-age=31536000
Expires: Sun, 26 Feb 2012 12:57:18 GMT
Content-Encoding: gzip

Request Headers

GET /fonts/825588825.ttf HTTP/1.1
Host: typefront.com
User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: null
EN

回答 1

Stack Overflow用户

发布于 2012-01-13 00:42:57

更新2016年11月:珊瑚内容分发网络,如下所述,不再运行。

这是一个相当通用的“解决方案”。有一个生产服务,经营多年,向公众开放(虽然检查他们的商业用途,我不知道它是否合适)。这是美国联邦政府资助的一个内容分发网络的研究项目。

它被称为珊瑚,并通过将.nyud.net附加到任何 URL来工作,例如

代码语言:javascript
复制
http://www.example.com/static/MyFont.ttf

变成了

代码语言:javascript
复制
http://www.example.com.nyud.net/static/MyFont.ttf.

没有别的事可做了。在第一个请求中,Coral服务器获取并缓存文件(预期会有一些延迟),然后不再进行检查(它们只是很少检查新版本)。

它使用的是一个高级的DNS扩展,DNAME记录,所以它可能不适用于非常老的操作系统或DNS解析器,尽管已知任何合理的最近的都能工作。这样,请求就会被路由到地理位置相近的服务器。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5127168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档