PHP删除HTTP标头

时间:2009-12-21 00:10:38

标签: php http-headers

我认为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)。

9 个答案:

答案 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");
在遥远的未来,或者同样荒谬的时间。请记住在发送任何输出之前设置标题值,除非您为整个页面执行输出缓冲。

http://php.net/manual/en/function.header.php

答案 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文件或ExpiresByTypeExpiresDefault

中封装的任何块中检查<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文件与您的自定义标题或缺少它们的脚本并且脚本可以在

内运行