即使在Ctrl-F5之后,动态生成的HTML元素中的图像仍会被缓存

时间:2013-01-04 21:13:15

标签: jquery ajax browser-cache

在IE中使用 Ctrl + F5 刷新页面或 Ctrl + Shift + R 在Chrome中,大多数图片也会刷新,但是动态生成的HTML元素(通过AJAX / jQuery)引用的一些图像不是。动态DOM更新后获取的图像似乎总是命中缓存,即使页面是硬刷新的。

示例小提琴:http://jsfiddle.net/dhDju/4/ (并使用Chrome / IE开发人员工具中的“网络”标签。)

这在Chrome和IE中是一致的 - Chrome会显示“来自缓存”的图像请求,IE根本不会显示它。看起来硬刷新不适用于页面上的后续DOM修改。

因此,除非我明确清除缓存,否则对这些图像的更改不会生效。

在使用requires.js时,我偶尔也会看到这个脚本 - 在这种情况下,<script>标记也是动态生成的。

知道为什么会这样,或者如何修复它?

对于动态元素,cache-control / max-age标头似乎并不重要。我的QA服务器没有缓存控制或过期标头,我仍然遇到动态元素的这个问题。我看到的主要区别在于,如果没有缓存标头,“正常”<img>资源也会在使用F5或Ctrl + R进行软重新加载时使用条件GET / 304未修改的响应进行刷新。

我熟悉在发布后重命名文件的想法 - 不理想,因为这也会影响每个版本的开发和QA服务器。在每次构建之后必须告诉测试人员清除缓存也很烦人。所以我想知道是否有办法解决根本问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

我经常会将网站版本值附加到CSS,JS和图像文件中。然后在更新后我可以增加版本,浏览器将加载最新的文件。例如:

<img src="picture.jpg?v=1.1">