网站部署后需要强制刷新

38
在部署新版本的网站后,浏览器会从旧网页的缓存中加载所有内容,直到进行强制刷新。图像和cookie都是旧的,一些AJAX部分也无法正常工作。
在部署后如何为用户提供最新版本的页面?
该网页是使用IIS7+的ASP.Net网页。
3个回答

42

你可以在每个资源的末尾添加一个变量,使其在每次部署时都发生变化。例如,你可以将样式表命名为:

styles.css?id=1

每次ID都会改变。

这将迫使浏览器下载新版本,因为它无法在缓存中找到它。


17
有没有更简单的方法来做这件事?我正在加载数千个资源。 - Germstorm
6
在配置文件中设置一个变量并更新它,然后将该变量添加到所有资源调用中。一次更新,所有URL都会发生变化。 - ceejayoz
1
@ceejayoz 老问题了,但如果配置文件被缓存了怎么办? - NorCalKnockOut
@ceejayoz 哦,明白了。谢谢! - NorCalKnockOut
2
这可能听起来像一个奇怪的问题,但如果你将变量添加到配置文件中,并在页面上的资源调用中调用该变量,那么当页面被缓存时会发生什么?由于配置文件位于服务器上,缓存的网页将调用新的配置值并获取正确的资源,但是页面仍然被缓存,对吗? - Jolley71717
显示剩余5条评论

5
对于ASP.NET,您可以使用缓存控制和过期标头。 您还可以在IIS 7中设置类似的标头以供图像使用。 如果您有任何其他cookie,则可以手动将其过期
我没有尝试过,但看起来您可以更好地批量设置IIS 7中的缓存控制。 请参见此线程此链接。 那时,您只需取消设置任何自定义cookie(这些您将无法使用HTTP缓存控制设置进行控制)。
我不知道是否有任何一种方法可以轻松地“一次性取消所有内容”。

3

这可能会影响性能。缓存可以节省用户大量的带宽和时间。 - ceejayoz
你可以(而且应该)通过LAST-MODIFIED指令或ETags控制缓存头。请参阅此页面进行快速了解,以及此页面获取更深入的解释。 - Stephane Gosselin
基本上,您需要两个标头:Cache-Control: must-revalidateLast-Modified: 15 May 2011 17:43:00 GMT 这是我所知道的控制客户端缓存机制的唯一方法。 - Stephane Gosselin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接