发送缓存控制标头在Codeigniter中不起作用

时间:2012-03-19 18:08:36

标签: php http codeigniter

我可能错过了一些明显的东西,但是我的Codeigniter应用程序在我要求它时不会发送标题。 所以在任何控制器或扩展的MY_Controller中:

$this->output->set_header("Last-Modified: " . gmdate( "D, j M Y H:i:s" ) . " GMT");
$this->output->set_header("Expires: " . gmdate( "D, j M Y H:i:s", time() ) . " GMT");
$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate");
$this->output->set_header("Cache-Control: post-check=0, pre-check=0");
$this->output->set_header("Pragma: no-cache");
$this->output->set_header("Steve: it aint working you know");

我得到的标题是:

HTTP/1.1 200 OK
Date: Mon, 19 Mar 2012 18:03:06 GMT
Server: Apache/2.2.20 (Ubuntu)
X-Powered-By: PHP/5.3.6-13ubuntu3.6
Last-Modified: Mon, 19 Mar 2012 18:03:06 GMT
Expires: Sat, 01 Jan 2000 00:00:01 GMT
Cache-Control: post-check=0, pre-check=0, max-age=0
Pragma: no-cache
Steve: it aint working you know
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 10780
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

所以我知道它是从Steve:标头发送标头但是它没有发送我的Cache-Control设置。如果我注释掉Cache-Control设置,它仍会显示相同的值。

这可能会被覆盖?它是Codeigniter,PHP还是Apache?

2 个答案:

答案 0 :(得分:1)

我会检查您的Apache配置,特别是mod_expiresHeader Directive的配置方式。

请注意,“在运行内容处理程序和输出过滤器之后修改标头”,允许修改传出标头。因此Apache可能会设置为修改您在PHP中设置的标头。

我不是Apache专家,但这是我必须要解决的类似问题。

答案 1 :(得分:1)

我采取的步骤: 将以下内容添加到我的.htaccess文件中。

<IfModule mod_headers.c>
Header add Cache-Control:  "no-store, no-cache, must-revalidate"
</IfModule>

    sudo a2enmod headers
    sudo service apache2 restart