浏览器正在缓存,即使在被迫不缓存的情况下也是如此


Browser is caching even when forced not to

我有一个无法用我正在开发的应用程序解释的掉队行为。在应用程序的引导程序中,我会做这样的事情:

  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!");
  }

例如,如果我自己停止DB,应用程序将停止并打印the app is dead!。公平地说,这就是它应该做的。

问题是,当我重新启动DB时,会出现奇怪的行为:基本上浏览器会显示应用程序的工作页面(主页、登录页面等),但当点击f5引用页面时,错误页面有时仍会以非常的间歇性方式显示(第一个f5:显示,第二个f5:我得到正常页面,第三个f5,再次显示等)。

这显然是DB不工作时页面的缓存版本,但我不明白浏览器为什么要缓存,因为我告诉它不要缓存(请参阅所有header())。

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

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