我可能错过了一些明显的东西,但是我的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?
答案 0 :(得分:1)
我会检查您的Apache配置,特别是mod_expires
和Header 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