我注意到一些浏览器(特别是Firefox和Opera)非常热衷于使用.css和.js文件的缓存副本,即使在浏览器会话之间也是如此。当您更新这些文件之一但用户的浏览器继续使用缓存的副本时,这会导致出现问题。
问题是:强制用户浏览器在文件更改后重新加载文件的最优雅方法是什么?
理想情况下,该解决方案不会强制浏览器在每次访问页面时重新加载文件。我将发布自己的解决方案作为答案,但我很好奇是否有人有更好的解决方案,我将让您决定。
更新:
经过一段时间的讨论后,我发现John Millikin和da5id的建议很有用。事实证明有一个术语:自动版本化。
我在下面发布了一个新答案,该答案是我原来的解决方案和约翰的建议的结合。
SCdF建议的另一个想法是将伪查询字符串附加到文件中。(一些由pi提交的将时间戳自动用作伪查询字符串的Python代码。)但是,关于浏览器是否将使用查询字符串缓存文件存在一些讨论。(请记住,我们希望浏览器缓存文件并在以后的访问中使用它。我们只希望它在更改后再次获取文件。)
由于尚不清楚假查询字符串会发生什么,因此我不接受该答案。
我将文件内容的MD5哈希值放在其URL中。这样,我可以设置一个很长的到期日期,而不必担心用户使用的是旧的JS或CSS。
我还在运行时(或文件系统更改时)每个文件计算一次,因此在设计时或构建过程中没有什么可做的。
如果您使用的是ASP.NET MVC,则可以在此处查看其他答案中的代码。