【问题标题】:ASP.Net - Prevent website from being screwed up on computers with cached CSSASP.Net - 防止网站在具有缓存 CSS 的计算机上被搞砸
【发布时间】:2009-08-04 07:14:17
【问题描述】:

当我为我的网站上传新版本的 CSS 文件时,会出现一个问题,即查看页面的客户端可能在其计算机上存在缓存版本。在清除缓存或按 Ctrl + F5 之前,他们无法看到 CSS 更新(甚至是其他一些静态资源,如图像)。这显然不是一个理想的解决方案。

解决此问题的一种方法是在我每次上传新的网站版本时重命名 CSS 文件。有没有办法通过 Visual Studio 自动执行此操作?我正在使用 AnkhSVN 进行版本控制,所以如果我可以获得一个脚本来自动为选定的文件执行此操作,那也可以。

我什至不知道 Google 到底是为了什么 - 有人能指出我正确的方向,并建议最佳做法吗?

编辑:哦,忘了提 - 我需要结合静态资产上的 expires 标签来执行此操作。由于我的研究还处于早期阶段,所以我不确定这有什么关系。

谢谢!

【问题讨论】:

    标签: asp.net css svn


    【解决方案1】:

    一个简单的解决方法是将查询字符串添加到您的 css 文件的 url。因此,不是引用 file.css,而是引用 file.css?a=1。下次您更改 css 文件时,您只需更改查询,文件将被重新下载。

    【讨论】:

    • 这个技术的真实例子可以在这个网站的源代码中找到!
    • 有趣 - 所以如果查询字符串值相同,浏览器就知道它有最新版本......可能是我正在寻找的解决方案!
    • 另外,如果您的 css 经常更改或您的网站正在开发中,您可以将其设置为每次显示页面时将查询字符串更改为随机值。这将强制浏览器在每次查看页面时下载 css 文件。
    【解决方案2】:

    我在调用 css 时总是使用版本号。例如

    <html>
      <title>
        <script src="myScript.js?v=1.1"/>
        <link rel="stylesheet" href="myStyle.css?v=1.1" />
      </title>
      <body>
      </body>
    </html>
    

    通过增加此数字,您将指示浏览器获取新版本的样式表/javascript。这在使用 AJAX 请求时也很方便,一些浏览器也倾向于缓存它们。

    您可以调整这种技术并围绕它构建一些代码来自动增加数字。例如,您可以使用在用户会话开始时生成的生成数字(或日期时间)。当用户稍后回来时,他会获得一个新会话,从而获得一个新号码。

    您还可以使用程序集中的内部版本号(您可以指示 .NET 自动增加程序集中的内部版本号),或者在您手动更新的 web.config 中保留一个内部版本号。

    但关键是在脚本/css 引用后面使用查询字符串,因为浏览器并不总是遵守过期标头,使用(新)查询字符串将强制浏览器获取新版本。

    【讨论】:

      【解决方案3】:

      如果您想使用 HTTP 标头,请考虑使用 ETag: http://en.wikipedia.org/wiki/HTTP_ETag

      【讨论】:

        【解决方案4】:

        有一个很好的解决方案可以通过使用this blog entry 上的函数来防止 CSS 和 Javascript 缓存。

        它在查询字符串上使用 SVN 修订号,但这可以很容易地修改为使用随机数或日期/时间字符串。

        【讨论】:

          猜你喜欢
          • 2014-03-06
          • 2011-04-02
          • 2015-06-21
          • 1970-01-01
          • 2014-10-30
          • 2012-10-11
          • 2016-06-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多