ASP.Net - 防止网站被缓存在具有缓存CSS的计算机上

时间:2009-08-04 07:14:18

标签: asp.net css svn

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

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

我甚至不知道Google的具体内容 - 有人能指出我正确的方向,并提出最佳做法吗?

编辑:哦,忘了提 - 我需要结合静态资产上的expires标签来做这件事。由于我还处于研究阶段,所以我不确定这是如何结合的。

谢谢!

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:1)

我在调用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引用后面使用查询字符串,因为浏览器并不总是服从expire头,并且使用(新)查询字符串会强制浏览器获得新版本。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

使用this blog entry上的函数可以很好地解决CSS和Javascript缓存问题。

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