29

所以我在 php 中发送一个标头来缓存我的页面(这也集成到我们的“CDN”(contendo/akamai)中)。我总是使用这个 pragma: cache header,我见过各种使用它的例子;但是,我刚刚检查了 fiddler 以测试我们开发的这个 .net 应用程序的流量,它说:

Legacy Pragma Header is present: cache
!! Warning IE supports only an EXACT match of "Pragma: no-cache". IE will ignore the Pragma header if any other values are present.
...

我想那没关系。其余的响应似乎很好并且符合我的规格。这是我的代码:

function headers_for_page_cache($cache_length=600){
    $cache_expire_date = gmdate("D, d M Y H:i:s", time() + $cache_length);
    header("Expires: $cache_expire_date");
    header("Pragma: cache");
    header("Cache-Control: max-age=$cache_length");
    header("User-Cache-Control: max-age=$cache_length");
}

问题是这有关系吗?编译指示标头甚至可以做什么?我需要吗?我检查了 HTTP 标头规范文档,它说它是特定于实现的,唯一强制执行的 Pragma 是“Pragma:no-cache”。

这是在特定时间内缓存标头的最佳选择吗?

4

1 回答 1

44

以一种非常简化的形式,Pragma:no-cache or Pragma:cache现在“几乎”是过时的将缓存指令传递给客户端实现的方式,特别是浏览器和代理。客户端实现响应 Pragma 标头的方式各不相同,这就是规范说它是特定于实现的原因。

更现代的方式Cache-control是您可以安全依赖的方式,因为几乎所有客户端实现都严格遵循它。

此外,如果您同时拥有Cache-controlPragma设置相同的指令,例如缓存,则Cache-control优先。

这是一篇关于与缓存相关的所有内容的优秀文章,我认为它是一本非常有趣且有用的读物​​:http ://www.mnot.net/cache_docs/

于 2012-08-16T18:23:39.670 回答