为什么即使在发送了无缓存标头之后,页面仍在缓存

Why is the page still caching even after the no-cache headers have been sent?

本文关键字:缓存 之后 为什么      更新时间:2023-09-26

我对此做了大量研究,并向许多人寻求帮助,但仍然没有成功。以下是详细信息。。。

我参与了一个网站的开发,该网站从各种数据文件中提取数据,将它们组合在一个temp.csv文件中,然后使用一个流行的绘图库:dygraph进行绘图。该网站的大部分内容都是用PHP编写的。确定绘制图形的数据的参数存储在用户会话中,.csv以用户会话命名并可供下载,然后.csv文件被编写在一个脚本中,该脚本将其传递给dygraph对象。我们发现,即使并没有发送缓存标头:

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框架)。

在这一点上我已经无计可施了。我们已经发送了php标头;我们已经尝试将IIS上php的缓存配置文件设置为"DisableCache"(或其他);我们已经尝试向结果页面发送一个随机查询字符串;我们已经尝试了所有合适的元标签,但都没有成功。

只要您的服务器忽略URL参数,您就可以通过提取"URL.csv?(随机数)"而不是"URL.csv"来绕过任何浏览器缓存。

您尝试过"上次修改"answers"ETag"吗?并且只关注关于该图的HTTP标头。