我已经对此进行了大量研究,并要求许多人提供帮助,但仍然没有成功。以下是详细信息...
我参与开发一个网站,该网站从各种数据文件中提取数据,将它们组合到一个临时的 .csv 文件中,然后使用流行的图形库绘制图形:dygraphs。该网站的大部分内容是用 PHP 编写的。确定绘制数据的参数存储在用户会话中,.csv 以用户会话命名并可供下载,然后将 .csv 文件写入脚本,将其传递给 dygraphs 对象。我们发现,即使发送了无缓存标头:
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
许多用户在会话中间体验,(如果生成了足够多的不同图表)页面显示了较旧的页面静态渲染(他们在会话中早些时候绘制的数据),就好像它被缓存和加载而不是获得新的请求。但它只会变得更奇怪:
我已经在 Firefox 和 Chrome 中使用开发者工具进行了检查,两种浏览器都可以正常接收无缓存标头;即使在查看页面源时出现问题,源也是正确的内容(表/图例也是使用 php 动态创建的,源显示正确的表,但呈现的是较旧的内容);页面开始正确渲染,直到图表即将显示,然后显示较旧的内容;较旧的内容显示为好像它是一个完全静态的覆盖 - 缓存的图形没有相同的动态功能(翻转数据点显示、缩放和平移等)并且好像正确的页面在它下面的某个地方(csv 文件的下载按钮会根据表格的大小移动。如果您单击下载 .csv 按钮,旧的静态页面不会执行任何操作,但是,如果您可以设法在其下方的页面中找到该文件,则可以单击并仍然下载 .csv。.csv 中的数据是正确的)
这是迄今为止我在开发中看到的最奇怪的事情之一。其他一些相关事实是,我个人遇到的所有问题都是在我使用 Chrome 时发生的。Firefox 用户没有报告过这些症状。IE用户也有同样的问题(IE用户被迫使用chrome frame)。
在这一点上,我束手无策。我们已经发送了 php 标头;我们尝试将 IIS 上 php 的缓存配置文件设置为“DisableCache”(或其他);我们尝试向结果页面发送一个随机查询字符串;我们已经尝试了所有适当的元标记——都没有成功。