即使被迫不使用浏览器也会进行缓存

时间:2013-12-06 23:07:27

标签: php caching

我有一个我无法用我正在处理的应用程序解释的暴力行为。在应用程序的引导程序中,我做了类似的事情:

  try {
     // db connection and 3rd party services availability checks
  } catch (Exception $ex) {
     // here I will put all sorts of headers meant to disable caching on the client
     header("Content-Type: application/json");
     header("Expires: on, 01 Jan 1970 00:00:00 GMT");
     header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
     header("Cache-Control: no-store, no-cache, must-revalidate");
     header("Cache-Control: post-check=0, pre-check=0", false);
     header("Pragma: no-cache");
     die("the app is dead!");
  }

例如,如果我自己停止数据库,应用程序将暂停并打印the app is dead!。很公平,这应该是它应该做的。

问题是,当我重新启动数据库时,会出现奇怪的行为:基本上浏览器会显示应用程序的工作页面(主页,登录页面等),但是当按下f5来引用页面时,错误页面有时仍会以非常间歇方式显示(第1个f5:显示,第2个f5:我得到正常页面,第3个f5:它再次显示等等。)

当数据库无法正常工作时,这显然是页面的缓存版本,但我无法理解为什么浏览器正在缓存,因为我告诉它不要(请参阅所有header())。

1 个答案:

答案 0 :(得分:0)

在您的代码无法正常处理的情况下,会抛出一些其他异常。检查try块中的每个调用,阅读其中的文档并确保处理它可能抛出的异常。

一般情况下,一个大的try块,只有一个except块的不同子系统的一堆调用,假设只有一个故障模式是个坏主意。尝试使用多个except块,每个块捕获不同的异常,并使最后的通用处理程序包含在其输出中捕获的实际异常(如果您不这样做,则在HTML中作为注释)想要警告用户。)