当发布新图像时,确保图像不会在客户端浏览器中兑现的最佳方法是啥?

Posted

技术标签:

【中文标题】当发布新图像时,确保图像不会在客户端浏览器中兑现的最佳方法是啥?【英文标题】:what is the best way to ensure images are not cahsed in client browsers when a new image is released?当发布新图像时,确保图像不会在客户端浏览器中兑现的最佳方法是什么? 【发布时间】:2014-11-11 08:23:17 【问题描述】:

我们多次收到客户的问题,即使用最新版本发布到生产网站的新图像没有出现在他们的浏览器中。最好的解决方案是什么?

    图片文件夹的IIS内容在发布后过期我可以做。

问题是我必须打开它几天,直到 99% 的用户访问了该网站。

    META 标签、HttpCacheability.NoCache 等将不起作用,因为这些是图像。

    对于 JS 和 CSS 或网站图标,很容易以编程方式在链接末尾添加版本。但是对于图像该怎么办?链接也可以来自 CSS。

所以我能想到的唯一选择是每次更改图像名称:(

或者添加一个包含站点中所有图像链接的字符串,在签入时应将其替换为(使用脚本)发行版本号。

还有其他选择吗?

【问题讨论】:

【参考方案1】:

1- 标头

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

但有时,浏览器会忽略它们。

2-url参数

<img src="myimage.jpg?1243"/>

您可以通过 html 或脚本服务器端上的 javascript 执行此操作。

3-.htaccess

以编程方式将序列添加到源文件名中:

 filename[.serial].ext

然后在您的服务器上添加一个 .htaccess,而不是修剪那个序列

<IfModule mod_rewrite.c>
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ $1.$3 [L]
</IfModule>

【讨论】:

感谢您的建议 1. 元标签 >> 只能在页面中添加,不会影响图片。 2.在jquery中,如果我尝试,将加载已经旧的图像,加载后更改它是不正确的。2次加载和闪烁可能会发生! 3.我正在检查第三个解决方案 1- 元标记 >>> 这些是“缓存策略标头控件”,正在影响浏览器处理 GLOBAL 页面缓存的方式,包括资源!但是某些浏览器出于某种原因将它们视为指示性,而不是指令 2-它可以工作,一直在做。 3- 繁重的工作,但有效。

以上是关于当发布新图像时,确保图像不会在客户端浏览器中兑现的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

(iphone) 从图像创建新图像时是不是会造成泄漏?

PDFbox 1.7.0 - 如何在使用PDFBox添加新图像时保留现有图像?

缩放后在滚动视图中设置新图像时出现问题

移动/调整窗口大小时闪烁

新内容不继承父 div 的无限滚动样式

重复使用的单元格在刷新图像时滞后