什么是Pragma标头?缓存页面..和IE

时间:2012-08-16 18:04:31

标签: php caching http-headers

所以我在php中发送一个标题来缓存我的页面(这也集成到我们的“CDN”(contendo / akamai)中)。我总是使用这个pragma:缓存头,我已经看过各种例子也使用它;但是,我只是检查了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");
}

问题是这件事吗? pragma标题甚至做了什么?我需要它吗?我检查了HTTP标头规范文档,它说它是特定于实现的,并且唯一强制执行的Pragma是“Pragma:no-cache”。

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

1 个答案:

答案 0 :(得分:39)

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

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

此外,如果您为同一条指令设置Cache-controlPragma,例如缓存,则Cache-control优先。

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