确保在客户端更新CSS/JavaScript
我正在努力确保我的ASP.NETMVC网站的访问者总是拥有最新的CSS和Javascript(而不是一些旧的缓存版本) 我试图通过在应用程序域启动时生成一个种子值来实现这一点,并自动将其附加到CSS和Javascript URL中(因此现在的链接不是/Content/All.js,而是/Content/All.js?549238等等) 不幸的是,我刚刚通过Firebug调试发现,现在每次都会导致完整的下载请求(新的“种子”响应不再缓存,但我只希望第一次检查下载“更新”版本,然后再次缓存/仅检查是否有差异) 我如何才能实现我的目标,有没有更好的方法?我需要客户端始终请求最新版本,但如果没有发生更改,则缓存确保在客户端更新CSS/JavaScript,javascript,css,caching,Javascript,Css,Caching,我正在努力确保我的ASP.NETMVC网站的访问者总是拥有最新的CSS和Javascript(而不是一些旧的缓存版本) 我试图通过在应用程序域启动时生成一个种子值来实现这一点,并自动将其附加到CSS和Javascript URL中(因此现在的链接不是/Content/All.js,而是/Content/All.js?549238等等) 不幸的是,我刚刚通过Firebug调试发现,现在每次都会导致完整的下载请求(新的“种子”响应不再缓存,但我只希望第一次检查下载“更新”版本,然后再次缓存/仅检查是
编辑:这似乎与我的页面通过SSL提供服务的事实有关。I关于使用SSL启用客户端缓存的问题。我认为您生成的种子值是一个随机数。将其替换为版本号,以便仅当应用程序的版本号更改时才能重新下载 像 /Content/All.js?appVer1.5 当您修改应用程序时,您可以将其更改为
/Content/All.js?appVer1.6将修订号放在url中:
foo.css?rev=348
--编辑
您也可以通过使用构建工具(实际上,我是用自己编写的自定义工具)实现这一点
--编辑
如果它使你的船漂浮,这就是它的作用
All-a2a69e19d8628b65cb935708d64d7337.js
。这样,数字仅在脚本内容更改时更改<asp:ScriptTag source="All.js"/>
替换为:
<script src="/All-a2a69e19d8628b65cb935708d64d7337.js" type="text/javascript"></script>
这不是随机的。正如我所说的,当应用程序域初始化时,它作为静态只读生成一次。在w3wp进程的整个生命周期内,最多只能写入或更改一次。即使它没有真正回答我的问题,也被接受。。。该领域的最佳/第一想法。这有点可笑。如果你打算使用这样的方案,为什么不使用上次修改的日期呢?因为,为了识别文件中的更改,文件的修改时间不如其内容准确?我认为在这种情况下准确度不是一个大问题。不,修改时间会相当准确,除非您决定以编程方式将其更改为及时返回。无论哪种方式,当包含构建编号非常琐碎时,这都不是一个好主意。特别考虑到您建议更改文件名,这不是必需的。