如何阻止zlib.output_compression破坏HTTP缓存头

时间:2017-07-12 03:00:54

标签: php zlib

我有一个PHP脚本打包了一些内容并打开了zlib压缩,如下所示:

ini_set('zlib.output_compression', '1');
ini_set('zlib.output_compression_level', '-1');

启用HTTP缓存:

$age = 60 * 60 * 24 * 365;
$expires = time() + $age;
header("Cache-control: max-age={$age}");
header('Pragma: cache');  // to overwrite Zend/PHP's default of `no-cache`
header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', $expires));

这通常很好。但是,对于我的一个较大的资源,我的缓存控制头被破坏了,而是发送以下内容:

Cache-Control: no-store, no-cache, must-revalidate
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache

在具有本地网络和localhost连接的所有经过测试的服务器环境(CentOS / Apache,Raspbian / Apache,Windows / IIS)中都会发生这种情况。禁用zlib压缩会带来缓存头;但是,这不是一个长期的解决方案。

是什么原因导致zlib破坏某些资源上的缓存标头?而且,我如何确保它不会破坏我的缓存标题?

1 个答案:

答案 0 :(得分:1)

我怀疑zlib是否导致此问题。我" grep" ed PHP源代码(最新版本,7. *),似乎Pragma标题仅在3个地方受到影响:

  1. 转/会话
  2. 转/药业
  3. SAPI /的Litespeed
  4. 设置标题后,您可能会调用session_start()。在这种情况下,Pragma标头将设置为no-cache

    如果情况并非如此,请提供其他信息:PHP版本以及如何重现该问题。