13

更新: 看起来标头请求信息是罪魁祸首。如何更改请求标头的 max-age 属性?TIA。


嗨,我在一个网站上使用@font-face,我遇到了文本加载延迟(可能是由于每页都加载了字体)。我知道客户端必须下载一次字体才能正确显示,但是每一页?

有没有办法强制浏览器缓存该文件?还是有另一种方法可以加快字体的加载时间?(这是一个更适合在服务器故障上发布的问题吗?)

提前致谢。最坏的情况,我会忍受延迟,所以我不需要任何“起飞@font-face”的答案......;)

附加信息:

  • 我已经在 Mac 和 Windows(XP 和 7)上的 Safari (4) 和 Firefox (3.5RC1) 中对此进行了测试
  • 我测试过的所有浏览器目前都设置为允许缓存(默认开启)
  • URL不是动态的,它只是“/fonts/font.otf”
  • 字体 URL 是正确的,因为页面加载字体并正确显示它,尽管比正常速度慢
  • 请求标头:

    Cache-Control:max-age=0
    If-Modified-Since:Wed, 24 Jun 2009 03:46:28 GMT
    If-None-Match:W/"484d9f2-a5ac-46d10ff2ebcc0"
    Referer: http://testurl.com /
    User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6; en-us) AppleWebKit/530.13 (KHTML, like Gecko) Version/4.0 Safari/530.15

  • 响应标头:

    连接:Keep-Alive
    日期:Thu,2009 年 6 月 25 日 02:21:31 GMT
    Etag:"484d9f2-a5ac-46d10ff2ebcc0"
    Keep-Alive:timeout=10, max=29
    服务器:Apache/2.2.11 (Unix) mod_ssl/ 2.2.11 OpenSSL/0.9.8i DAV/2 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635

4

2 回答 2

4

你永远不能强迫浏览器缓存某些东西,只能鼓励它。我想不出为什么不缓存具有正确过期标头的字体文件的原因,这将我们带到:

  • 这是一个浏览器错误(你不说哪个浏览器)
  • 您的缓存控制标头丢失或错误
  • 您的浏览器配置为不缓存任何内容(图像是否缓存?)
  • 您的字体 URL 是动态的,因此浏览器认为每个请求都针对不同的资源
  • 字体文件实际上丢失或 URL 拼写错误。
  • 延迟不是由字体下载引起的(您确实说过您认为这是问题所在)

我认为更多信息是有序的。

编辑:设置缓存控制是服务器和语言特定的事情。查看mod_expires以获取有关 Apache 中缓存的信息。

于 2009-06-24T04:14:21.530 回答
2

你确定你的字体文件是可缓存的吗?就像其他静态内容一样,它们应该有很远的过期日期,并且它们的标题应该配置为允许它们被缓存。如果您将字体托管在服务器场上,您将需要确保您的 etag 标头在场中的所有服务器上均已标准化...否则后续对字体的请求可能会强制从备用服务器重新下载它即使已经从另一台服务器下载了相同的数据。

于 2009-06-24T04:03:24.817 回答