【问题标题】:Website needs force refresh after deploy部署后网站需要强制刷新
【发布时间】:2011-09-10 05:44:17
【问题描述】:

在部署新版本的网站后,浏览器会从旧网页的缓存中加载所有内容,直到强制刷新完成。图片是旧的,cookie 是旧的,并且某些 AJAX 部分无法正常工作。

部署后我应该如何继续为用户提供最新版本的页面?

该网页是使用 IIS7+ 的 ASP.Net 网页。

【问题讨论】:

    标签: asp.net caching deployment iis-7


    【解决方案1】:

    您可以在每次部署时更改的每个资源的末尾附加一个变量。例如,您可以为样式表命名:

    styles.css?id=1
    

    id 每次都在变化。

    这将强制浏览器下载新版本,因为它在缓存中找不到它。

    【讨论】:

    • 没有更简单的方法吗?我正在加载 1000 多个资源
    • @Germstorm 在配置文件中设置一个变量并更新它。将该变量添加到所有资源调用中。一次更新,每一个 URL 都会改变。
    • @ceejayoz - 谢谢,我没想过这样做
    • @ceejayoz 老问题,但是如果配置文件被缓存了怎么办?
    • 这似乎是一个奇怪的问题,但是如果您将变量添加到配置文件并在页面上的资源调用中调用该变量,当页面被缓存时会发生什么?由于配置文件在服务器上,缓存的网页会调用新的配置值并获取正确的资源,但页面仍然被缓存,对吧?
    【解决方案2】:

    对于 ASP.NET,您可以使用 cache control and expires headers。您也可以set up similar headers in IIS 7 为您的图像。如果您有任何其他 cookie you can expire them manually.

    我还没有尝试过,但看起来您可以在 IIS 7 中更好地批量设置缓存控制。See this threadthis link。此时,您只需取消设置您拥有的任何自定义 cookie(您将无法使用 HTTP 缓存控制设置进行控制)。

    我不知道有什么方法可以轻松地“一次性取消所有设置”。

    【讨论】:

      【解决方案3】:

      您可以使用 http 标头来控制客户端的缓存。

      我就把这个留给你。 http://support.microsoft.com/kb/234067

      【讨论】:

      • 不过,这在性能方面可能很糟糕。缓存为用户节省了大量带宽和时间。
      • 您可以(并且应该)通过 LAST-MODIFIED 指令或 ETags 控制缓存标头,请参阅 this page 以了解快速运行情况,以及 this one for more in depth explanations
      • 基本上,您需要 2 个标头:Cache-Control: must-revalidateLast-Modified: 15 May 2011 17:43:00 GMT 这是我所知道的控制客户端缓存机制的唯一方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      • 2014-01-11
      • 2015-10-30
      • 1970-01-01
      相关资源
      最近更新 更多