ASP.NET MVC:OutputCache和http标头

vdh*_*ant 4 .net asp.net asp.net-mvc caching http-headers

我刚刚开始在我的一些控制器操作上使用OutputCache而且我没有得到我期望的响应.

我已将缓存时间设置为5分钟,Expires标头与Last-Modified标头相同,后者是发出请求的时间.

这是我目前得到的标题:

Date                    Thu, 16 Jul 2009 06:35:07 GMT
Server                  Microsoft-IIS/6.0
X-Powered-By            ASP.NET
X-AspNet-Version        2.0.50727
X-AspNetMvc-Version     1.0
Content-Encoding        gzip
Cache-Control           public, max-age=300
Expires                 Thu, 16 Jul 2009 06:35:06 GMT
Last-Modified           Thu, 16 Jul 2009 06:35:03 GMT
Vary                    *
Content-Type            text/html; charset=utf-8
Content-Length          575
Run Code Online (Sandbox Code Playgroud)

这是我期望的标题:

Date                    Thu, 16 Jul 2009 06:35:07 GMT
Server                  Microsoft-IIS/6.0
X-Powered-By            ASP.NET
X-AspNet-Version        2.0.50727
X-AspNetMvc-Version     1.0
Content-Encoding        gzip
Cache-Control           public, max-age=300
Expires                 Thu, 16 Jul 2009 06:40:06 GMT
Last-Modified           Thu, 16 Jul 2009 06:35:03 GMT
Vary                    *
Content-Type            text/html; charset=utf-8
Content-Length          575
Run Code Online (Sandbox Code Playgroud)

关于为什么会这样做的任何想法?

干杯安东尼

Fra*_*ger 5

max-age优先(来自RFC 2616):

我们使用该术语expires_value来表示Expires标头的值.我们使用该术语 max_age_value来表示响应中Cache-Control头的"max-age"指令所携带的秒数的适当值(参见第14.9.3节).

max-age指令优先于Expires,因此如果响应中存在max-age,则计算结果为:

  freshness_lifetime = max_age_value 
Run Code Online (Sandbox Code Playgroud)

否则,如果响应中存在Expires,则计算为:

  freshness_lifetime = expires_value - date_value
Run Code Online (Sandbox Code Playgroud)

因此客户端应该按预期使用缓存版本.