阻止Apache提供304状态代码的页面

时间:2015-04-16 13:12:07

标签: apache cakephp lamp http-status-code-304

我有一台服务器,LAMP,设置和CakePHP应用程序。当我通过任何Web浏览器请求网页时,它总是以304状态回复,即使在我更改了页面之后也提供旧页面。似乎服务器将任何先前访问过的页面保留在缓存中,并将其提供给之后请求它的任何人。例如:用户“X”登录到该系统并访问“主页”页面并注销。当另一个用户“Y”登录到系统时,他将看到“X”的“家”,而他应该访问他的主页并显示他的名字。相反,他认为它是X先前访问过它。当我完全删除资源时,说“home”页面,它仍然可以被访问。我已经检查过并且页面提供了304未修改的状态代码;但是我无法在我的apache设置中修改此行为;我是新手,我没有解决方案。这里有任何帮助。

1 个答案:

答案 0 :(得分:1)

如果其他人有同样的问题,我会回答我自己的问题。我发现了这种行为的潜在原因。我的apache设置很好,但是我的局域网有一个Apache Traffic Server,它可以缓存一些资源,默认情况下缓存图像和css文件之类的东西。如果对文件进行了修改,建议将其重命名,以便不提供旧文件。对于网页,我通过添加以下内容强制进行非缓存:

<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="cache-control" content="no-store" />
<meta http-equiv="cache-control" content="must-revalidate" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="0" />

当我使用cakePHP时,我还在AppController文件(asked here)的beforeFilter方法中添加了以下行:

function beforeFilter() {

    /**
     * https://stackoverflow.com/questions/27804628/cakephp-caching-issue-when-redirecting-back-to-same-page
     */

    header('Cache-Control: no-cache, no-store, must-revalidate');
    header('Pragma: no-cache');
    header('Expires: 0');

}

我希望它有所帮助。