确保在客户端更新CSS/JavaScript

确保在客户端更新CSS/JavaScript,javascript,css,caching,Javascript,Css,Caching,我正在努力确保我的ASP.NETMVC网站的访问者总是拥有最新的CSS和Javascript(而不是一些旧的缓存版本) 我试图通过在应用程序域启动时生成一个种子值来实现这一点,并自动将其附加到CSS和Javascript URL中(因此现在的链接不是/Content/All.js,而是/Content/All.js?549238等等) 不幸的是,我刚刚通过Firebug调试发现,现在每次都会导致完整的下载请求(新的“种子”响应不再缓存,但我只希望第一次检查下载“更新”版本,然后再次缓存/仅检查是

我正在努力确保我的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
    。这样,数字仅在脚本内容更改时更改

  • 创建一些机制,负责生成JavaScript文件的链接和/或标记

  • 这样,在您的ASP.NET页面中,就有如下内容:

    <asp:ScriptTag source="All.js"/>
    
    
    
    替换为:

    <script src="/All-a2a69e19d8628b65cb935708d64d7337.js" type="text/javascript"></script>
    
    
    
    这不是随机的。正如我所说的,当应用程序域初始化时,它作为静态只读生成一次。在w3wp进程的整个生命周期内,最多只能写入或更改一次。即使它没有真正回答我的问题,也被接受。。。该领域的最佳/第一想法。这有点可笑。如果你打算使用这样的方案,为什么不使用上次修改的日期呢?因为,为了识别文件中的更改,文件的修改时间不如其内容准确?我认为在这种情况下准确度不是一个大问题。不,修改时间会相当准确,除非您决定以编程方式将其更改为及时返回。无论哪种方式,当包含构建编号非常琐碎时,这都不是一个好主意。特别考虑到您建议更改文件名,这不是必需的。