我们的Web应用程序的版本号码会在每个请求中提供给客户端,所以我们可以检测代码的更新(即滚动更新),并显示一个popup窗口通知他们重新加载以利用最新的更新。
但是,在服务器版本号更新后,我遇到了一些奇怪的行为,其中一些请求返回新的版本号,一些返回旧的版本号,所以popup窗口不断popup,直到您重新加载页面几次。
最初我怀疑可能是apachecaching文件它通过file_get_contents从磁盘读取,所以而不是存储在一个纯文本文件的版本号,我现在将其存储在一个PHP文件,包含每个请求,但我遇到完全相同问题!
任何人有任何想法可能会导致apache或php它自我提供旧信息后,我已经做了更新?
编辑:我已经确认它没有浏览器caching,因为我可以让客户端生成唯一的URL到服务器(它可以通过重写处理),我仍然看到一些请求返回旧版本号和一些新的,并清除浏览器caching没有帮助
编辑2:请求的响应标题
HTTP/1.1 200 OK Date: Mon, 23 Jul 2012 16:50:53 GMT Server: Apache/2.2.14 (Ubuntu) X-Powered-By: PHP/5.3.2-1ubuntu4.7 Cache-Control: no-cache, must-revalidate Pragma: no-cache Expires: Sat, 26 Jul 1997 05:00:00 GMT Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 500 Connection: close Content-Type: text/html
编辑3:所以试图重现获得响应标题,我发现我只能做到这一点通过我们的完整部署过程,其中涉及创build存储代码和symlinking相关文件夹到webroot的版本化的文件夹。 只是改变版本号不足以导致它发生! 所以似乎有点与我创build的符号链接有关!
当符号链接发生变化时,我遇到了同样的问题。 看看https://bugs.php.net/bug.php?id=36555这也许是你在找什么。
尝试(如在此错误报告中所述)设置realpath_cache_size为0。