在ASP.Net MVC和IIS 7.5中设置最佳http缓存头和服务器参数
我有一个ASP.Net站点(碰巧是MVC,但这与这里无关),其中有一些页面我希望缓存得非常好 具体而言,我希望实现:在ASP.Net MVC和IIS 7.5中设置最佳http缓存头和服务器参数,asp.net,asp.net-mvc,caching,http-headers,outputcache,Asp.net,Asp.net Mvc,Caching,Http Headers,Outputcache,我有一个ASP.Net站点(碰巧是MVC,但这与这里无关),其中有一些页面我希望缓存得非常好 具体而言,我希望实现: 输出缓存在服务器上2小时 如果服务器上的文件内容发生更改,则应刷新该页面的输出缓存 在浏览器中缓存10分钟(即,甚至不要询问服务器是否有那么新鲜) 当浏览器确实发出一个实际的后续请求时,我希望它使用etag,这样服务器就可以在不修改的情况下返回304 (注:以上时间值仅为指示性示例) 1) 我可以通过Response.Cache.SetCacheability(HttpCach
- 1) 我可以通过Response.Cache.SetCacheability(HttpCacheability.Server)实现
- 我知道3)可以通过使用最大年龄和缓存控制来实现:private
- 我可以使用Response.Cache.SetETagFromFileDependencies()发出ETag李>
Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);
Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
Response.Cache.SetETagFromFileDependencies();
Response.Cache.SetValidUntilExpires(true);
Response.Cache.SetMaxAge(TimeSpan.FromSeconds(60 * 10));
我想要的情景可能吗?特别是:
- 浏览器能做到这一点吗?当Firefox在本地缓存中过期后发出新请求时,它确实会发送服务器之前响应的etag,但我得到的响应是200李>
- 像上面那样设置变量,在哪里设置输出缓存的持续时间
谢谢你的提示 我不确定您是否已经解决了这个问题(几个月后…),但这应该是可能的
SetMaxAge
应设置“Guaranteed”新鲜时间的量。如果您另外发送一个ETag,您将满足3和4的要求。无论您使用什么服务器端缓存机制,需求1和需求2都可以正交地解决:我从来没有像这样使用过ASP.NET服务器端缓存,但几乎可以肯定这是可能的
我会从您的回复中删除无关的标题,例如
SetRevalidation
-为什么有必要这样做?“Firefox…确实发送了etag”-您的意思是如果不匹配?在这种特殊情况下,您是否使用SetETagFromFileDependencies()
手动发出ETag?接下来,这是如何解决的?它到底是如何失败的?