我认为Apache会将这些HTTP标头添加到PHP脚本生成的所有响应中:
Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
这适用于实际的动态页面,但我有一些页面,虽然由PHP生成,但大多数是静态的,我希望浏览器缓存它们。
PHP中是否有一种方法可以从响应中删除这些标题,从而激活浏览器的默认缓存规则,如果没有,是否有任何值可以将它们设置为等同于它们不存在?
我不想设置自己的值,因为我希望浏览器使用与Apache本身提供的静态资源相同的缓存规则(不使用mod_cache)。
答案 0 :(得分:7)
对于这些特定文件,您可以添加以不同方式设置这些标头的header()调用。即。 header("Expires: " . $currentDatePlus10);
header("Cache-Control: max-age=3600, must-revalidate")
答案 1 :(得分:2)
您可以通过header()
函数从PHP手动提供HTTP标头。
我认为这样做应该禁用Web服务器的默认标头值。
答案 2 :(得分:2)
首先,我要检查它是否真的不是设置这些标题的php脚本之一。
register_shutdown_function('foo');
echo "test";
function foo() {
flush();
$c = "headers_list: \n " . join("\n ", headers_list());
if ( function_exists('apache_response_headers') ) {
$c .= "\napache_response_headers:";
foreach( apache_response_headers() as $k=>$v) {
$c.= "\n $k=$v";
}
}
$c .= "\n\n";
echo '<pre>', $c, '</pre>';
}
这会在您的服务器上打印“可用”吗?
答案 3 :(得分:1)
header("Expires: Fri, 1 Jan 2038 05:00:00 GMT");
在遥远的未来,或者同样荒谬的时间。请记住在发送任何输出之前设置标题值,除非您为整个页面执行输出缓冲。
答案 4 :(得分:1)
这些缓存标头在您开始使用会话时发送,默认情况下设置为“nocache”;这可以确保每个请求都能提供一致的结果。
例如,如果您有购物车系统且浏览器缓存/add?product=xyz
,则可能无法再次添加产品;这可能不是你想要的。
话说回来,可以在 session_start()
之前使用session_cache_limiter()
或设置相应的session.cache_limiter
配置设置来更改默认设置。
答案 5 :(得分:0)
可以按如下方式抑制缓存: PHP代码:
header ( "Cache-Control: no-cache, must-revalidate"); / / HTTP/1.1
header ( "Expires: Mon, 1 Jul 1990 05:00:00 GMT"); / / Date in the past
如果你想自动生成它,那么你在这里:PHP:session_cache_limiter()
- 手动它们
答案 6 :(得分:0)
您的代码中可能存在设置这些变量的地方,因为我找不到PHP在任何地方自动插入的位置,也不在我的任何LAMP安装中。
我安装的唯一自动生成的标头是带有PHP版本的X-Powered-By
。
正如您所说,他们建议在文档中说header("Expires:");
替换旧标题,但header("Cache-control:");
只是在我的浏览器中变成了Cache-Control: max-age=0
(所以这不是你的'重新尝试)。
我建议检查这些值是来自您已更改的框架或设置,但是在您运行PHP的不同版本的PHP /平台上可能会有所不同。
我在全局配置,vhosts,pr .htaccess文件或ExpiresByType
或ExpiresDefault
<IfModule mod_expires>
或<IfModule mod_expires.c>
指令
“我希望浏览器使用与Apache本身提供的静态资源相同的缓存规则(不使用mod_cache)。”
尝试查看静态资源,然后匹配规则。您可以使用此计算Expires offest - &gt; http://www.php.net/manual/en/function.header.php#93377
答案 7 :(得分:0)
如果您的网页不经常更改,您应该考虑使用Etag标头,如下所示:
https://gist.github.com/oliworx/4951478
这对于慢速连接(如移动电话)尤其有用。
提示:您应该始终使用firefox插件“实时HTTP标头”检查浏览器实际加载的内容:https://addons.mozilla.org/de/firefox/addon/live-http-headers/
答案 8 :(得分:-1)
我没有尝试过这个,但是您可以将这些页面保存为.html文件与您的自定义标题或缺少它们的脚本并且脚本可以在
内运行