我有一个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破坏某些资源上的缓存标头?而且,我如何确保它不会破坏我的缓存标题?
答案 0 :(得分:1)
我怀疑zlib
是否导致此问题。我" grep" ed PHP源代码(最新版本,7. *),似乎Pragma
标题仅在3个地方受到影响:
设置标题后,您可能会调用session_start()
。在这种情况下,Pragma
标头将设置为no-cache
。
如果情况并非如此,请提供其他信息:PHP版本以及如何重现该问题。