【问题标题】:Forcing Cache refresh after deploying new code部署新代码后强制刷新缓存
【发布时间】:2026-02-19 21:25:01
【问题描述】:

我们遇到了在部署代码后为我们的客户提供过时的 js、css 文件的问题。我们使用 IIS 作为我们的网络服务器,我们的代码在 ASP.Net 4.5 中。我做了一些研究,发现 ETag 与 Cache-control 结合使用应该可以工作。据我了解,ETag 是由 Web 服务器根据文件的日期时间戳自动生成的,所以我运行以下步骤来查看为什么系统没有发送最新版本的 js 和 css 文件。

  1. 导航到我的网站到一个网页,我们称之为 demo.aspx。(现在假设 demo.aspx 包含对 a.js、b.js 和 c.css 的引用)
  2. 验证浏览器请求了 a.js、b.js 和 c.css 文件,并且在我硬引用我网站上的页面 (Ctrl + F5) 后,网络服务器交付了这些文件。
  3. 点击了其他网页
  4. 访问 webserve 并手动更新文件(a.js、b.js 和 c.css 以更新这些文件的日期时间戳)
  5. 再次导航到 demo.aspx。
  6. 这次我只看到了对 demo.aspx 的请求,而没有看到对任何资源文件(a.js、b.js 和 c.css)的请求。

我不知道为什么当我访问我的 demo.aspx 页面时没有请求 .js 文件。

另外,每次我部署代码时,是否有任何简单的方法可以强制客户端浏览器下载最新版本的 .js 和 .css 文件。根据我的研究,我确实发现一种方法是重命名 .js 和 .css 文件。请注意,此解决方案不适用于我们。

我们确实在我们的项目中使用更新面板。不确定这是否与浏览器第二次不请求 js 文件有关

【问题讨论】:

    标签: asp.net iis-7 iis-7.5 browser-cache http-caching


    【解决方案1】:

    一个广泛使用的技巧是添加一个查询字符串参数,该参数随着cssjs 文件的每个新版本而递增。

    喜欢myScript.js?version=12。当数字发生变化时,浏览器会将其视为一个新文件并下载而不是从缓存中检索。

    仅通过编辑文件更改时间戳是行不通的,浏览器不会从服务器获取时间戳。您可以通过保存网站上的图像或文件来尝试此操作,它们都有下载时间的时间戳。

    【讨论】:

    • 感谢@VDWWD 的建议。我已经在 SO 上阅读过相关内容,但此解决方案对我们不起作用。