我有一个动态生成的CSS文件。它相当大,对于不同的浏览器有不同的内容。它很少改变。
所以在
.aspx
我有一页:
<%@ OutputCache Duration="86400"
Location="ServerAndClient"
VaryByParam="none"
VaryByCustom="browser" %>
对于生成动态图像的MVC操作,我有一个类似的指令:
[OutputCache(Duration = 86400,
VaryByParam = "none",
Location = OutputCacheLocation.ServerAndClient)]
这将导致文件在服务器和客户机(而不是中间代理)上缓存一天。
响应头似乎正确:
HTTP/1.1 200 OK
Cache-Control: private, max-age=83831
Content-Type: text/css; charset=utf-8
Expires: Wed, 09 Jun 2010 08:52:45 GMT
Last-Modified: Tue, 08 Jun 2010 08:52:45 GMT
Vary: *
Server: Microsoft-IIS/7.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Tue, 08 Jun 2010 09:35:34 GMT
Content-Length: 70073
服务器端缓存工作-进一步的请求不会再次执行代码。
然而,客户端缓存以两种不同的方式中断:首先,在每个页面上再次请求内容,尽管应该缓存内容。
为什么浏览器再次请求内容?
第二,当服务器再次请求内容时,它返回
HTTP 200
以及整个内容。它应该返回
HTTP 304未修改
没有主体-告诉浏览器重新使用已经下载的内容。
如何确保它返回
HTTP 304
当内容没有改变时?