1

我们设置了一个 Google Cloud Storage 存储桶,旨在提供网络字体。通过使用 CORS 设置,我们可以正确地为 IE 9、webkit、firefox 提供 woff 字体;eot 为 7 和 8 等。缓存控制设置为遥远的未来。在 webkit / mozilla 浏览器中的行为与预期的一样 - 字体被请求一次并缓存在客户端计算机上。

但是,Vary: Origin标头(似乎不可修改)导致 Internet Explorer 对每个页面请求发出 If-Modified-Since 请求,从而导致 304。来自 IE 的每页重新验证意味着存在闪存每个页面的无样式内容,因此我们不得不恢复使用我们自己的服务器,在那里我们可以更好地控制标题。

我们已经在本地复制了这个。我们的测试表明,无论是否使用 Access-Control-Allow-Origin 指令,字体文件是从同一来源还是从 cdn 提供都没有区别。关键问题完全是 Vary 标头,而 Goolge 的服务器将其设置为Origin

这种行为在 IE7、IE8 和 IE9 中很常见。它可以通过 a) 将 Vary 标头更改为Vary: Accept-Encoding或 b)完全删除Vary 标头来解决,因此一切正常。

使用当前配置,Google Cloud Storage 无法用作字体文件的 cdn,这令人沮丧。

有什么方法可以控制 Vary 标头吗?这是可以考虑的事情吗?如果没有,是否有任何 CDN 支持该功能?

谢谢。

4

1 回答 1

2

您可以做两件事来删除Vary: Origin响应的标题:

  1. 将您的CORS 配置设置为允许所有来源:<Origin>*</Origin>.
  2. 将对象放入禁用 CORS 的存储桶中(默认行为)。

否则,Vary: Origin标头对于正确的缓存行为是必要的,因为响应因来源而异。

于 2012-11-10T01:56:47.577 回答