3

我们的 Web 应用程序具有在每个请求时提供给客户端的版本号,因此我们可以检测到代码的更新(即滚动更新)并显示一个弹出窗口,通知他们重新加载以利用最新更新。

但是我在服务器上更新版本号后遇到了一些奇怪的行为,有些请求返回新版本号,有些返回旧版本号,因此弹出窗口不断弹出,直到您重新加载页面几次。

最初我怀疑也许 apache 正在缓存它通过 file_get_contents 从磁盘读取的文件,所以我现在将它存储在一个包含在每个请求中的 php 文件中,而不是将版本号存储在一个纯文本文件中,但我遇到的情况完全相同问题!

任何人有任何想法可能会导致 apache 或 php 在我完成更新后自行提供旧信息吗?

编辑:我已经确认它不是浏览器缓存,因为我可以让客户端生成唯一的 url 到服务器(它可以通过重写来处理),我仍然看到同样的问题,一些请求返回旧版本号和一些新版本号,并且清除浏览器缓存无济于事

编辑 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:因此尝试重现以获取响应标头,我发现我只能通过我们的完整部署过程来实现它,该过程涉及创建存储代码的版本化文件夹并将相关文件夹符号链接到 webroot 中。仅仅改变版本号是不够的!所以似乎与我创建的符号链接有某种关系!

4

1 回答 1

2

当符号链接发生变化时,我遇到了同样的问题。看看https://bugs.php.net/bug.php?id=36555这也许就是你要找的。

尝试(如本错误报告中所述)将 realpath_cache_size 设置为 0。

于 2012-09-07T16:05:47.120 回答