我注意到一些浏览器(特别是Firefox和Opera)非常热衷于使用.css和.js文件的缓存副本,即使在浏览器会话之间也是如此.当您更新其中一个文件但用户的浏览器继续使用缓存副本时,这会导致问题.
问题是:在更改文件时,强制用户浏览器重新加载文件的最优雅方法是什么?
理想情况下,解决方案不会强制浏览器在每次访问页面时重新加载文件.我会发布自己的解决方案作为答案,但我很好奇,如果有人有更好的解决方案,我会让你的投票决定.
更新:
在这里讨论了一段时间后,我发现John Millikin和da5id的建议很有用.事实证明,有一个术语:自动版本控制.
我在下面发布了一个新的答案,它是我原来的解决方案和John的建议的组合.
SCdF建议的另一个想法是将伪造的查询字符串附加到文件中.(一些Python代码自动使用时间戳作为伪造的查询字符串由pi提交.).但是,有一些关于浏览器是否会使用查询字符串缓存文件的讨论.(请记住,我们希望浏览器缓存文件并在以后的访问中使用它.我们只希望它在更改后再次获取文件.)
由于不清楚伪造的查询字符串会发生什么,我不接受这个答案.
所以我正在阅读这篇有关CSS/JS文件的ASP.NET MVC中"autoversioning"的stackoverflow帖子,并想知道"最佳"策略是做什么的.
提供的解决方案插入一个程序集编号 - 这意味着每次发布 - 它将更改每个单个文件,这是不理想的,因为如果您只修改1*.css或*.js,那么它将更改每个文件.
1)如何仅针对"单个文件"而不是使用IIS7上的修改日期或其他内容进行站点范围组装?
2)如果我有某种"静态"资产 - 例如http://static.domain.com/js/123.js - 如果有人集成了这个静态,如何使用重写来发送请求的最新文件链接到他们的网站?
即http://static.domain.com/js/123.js是链接,当请求到来时 - 检查并发送最新文件?