2009-11-26 75 views
5

我有一个问题与缓存失效技术有关......我试图为我的网站实现一种机制,它会自动使浏览器缓存(CSS,图像...)失效。我希望能够以编程方式使浏览器缓存无效,只要我更新网站(更改图像或样式);ASP.NET - 使浏览器缓存无效

例如:对于当前版本,其中包括css和一些图像已更改。在这种情况下,我希望更新完成后,当用户对网站执行请求时,浏览器的缓存会自动失效,从而迫使重新下载新的图像和样式。这应该只针对客户端的第一个请求完成......应该从缓存中检索以下内容(因此设置no-cache杂注是不可能的)。

这里就是我已经试过:在BeginRequest事件处理程序 ,我加了以下几行: Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate); Response.Cache.SetETag(“\”e111293b17594f1487d136ea7e9314ac \“”);

这会在响应头文件中设置ETag。我想,如果我在每个版本中更改这个ETag,并在每个请求中设置它,缓存将失效,但它似乎不是。我使用Live HTTP标头查看结果,并且ETAG正确设置了响应,但css和图像仍然从缓存中获取....

任何有关如何完成此操作的想法,或者如果它可以完成吗?

在此先感谢!

回答

5

我遇到过这样的问题。不幸的是,我找不到一个非常好的方法来完成这个工作,所以我不得不提出一个解决方法。我只是处理这个问题的CSS文件,所以我增加了一个额外的查询字符串参数,每一个CSS引用,例如

<link rel="stylesheet" type="text/css" 
     href="default.css?buildnumber=<%= Buildnumber %>" /> 

内部版本号在每个版本中增加这样浏览器就被迫去寻找新文件。不是一个理想的解决方案,但它运作顺利。

+0

这是一个不错的主意,但是图像怎么样......将项目查询参数放置到项目中的每个图像参考文件中并不是那么容易......感谢您的答案 – GeoXYZ 2009-11-26 19:36:40

+0

这应该仍然适用于图像。也许如果你的所有图像都是服务器控件,你可以重写一个页面事件,也许是渲染,并找到所有图像,并追加额外的url参数 – Bob 2009-11-26 19:38:14

+0

是的,我知道我可以这样做,但这不是一个好习惯......首先所有,认为我将不得不这样做,所有页面上的图像(因为不仅主页有图像,但用户控件也有内部图像);其次,为了实现这个过程的自动化(当我在页面上添加另一个图像控件时,不必调整代码),我将不得不遍历页面控件并仅查找图像控件,并修改imageurl属性。 。这是非常耗时的,特别是如果该控件的命中数很高,从而导致性能下降。 – GeoXYZ 2009-11-26 22:56:36