我如何缓存客户端和服务器当VaryByParam!=“无”?

时间:2010-02-03 02:38:15

标签: iis caching location outputcache varybyparam

我正在寻找一种在客户端服务器上缓存页面的方法,同时通过查询字符串参数“Version”改变服务器的输出缓存。

使用此标记:

<%@ OutputCache Duration="10" Location="Any" VaryByParam="none" %>

我得到了这些标题:

HTTP/1.1 200 OK
Cache-Control: public
Content-Type: text/html; charset=utf-8
Expires: Wed, 03 Feb 2010 02:29:24 GMT
Last-Modified: Wed, 03 Feb 2010 02:29:14 GMT
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.21006
X-Powered-By: ASP.NET
Date: Wed, 03 Feb 2010 02:29:14 GMT
Content-Length: 2364

这正是我在客户端所需要的,但在服务器端它不会因“版本”而异。

同时,使用此标记:

<%@ OutputCache Duration="10" Location="Any" VaryByParam="Version" %>

我得到了这些标题:

HTTP/1.1 200 OK
Cache-Control: public, max-age=4
Content-Type: text/html; charset=utf-8
Expires: Wed, 03 Feb 2010 02:28:29 GMT
Last-Modified: Wed, 03 Feb 2010 02:28:19 GMT
Vary: *
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.21006
X-Powered-By: ASP.NET
Date: Wed, 03 Feb 2010 02:28:25 GMT
Content-Length: 2352

这完全符合我想要的服务器端,但“Vary:*”标头强制浏览器在每次请求时重新加载页面。

是否有任何方法可以在客户端和服务器端进行缓存,同时通过参数进行更改?

1 个答案:

答案 0 :(得分:2)

找到它:

protected void Page_Load(object sender, EventArgs e)
{
  Response.Cache.SetOmitVaryStar(true);
}

此处有更多信息:http://support.microsoft.com/kb/836868

据说这已针对ASP.NET 4 beta 2进行了修复(请参阅http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes/#_TOC10),但从VS 2010 RC开始,它似乎仍然存在。