在ASP.Net MVC和IIS 7.5中设置最佳http缓存头和服务器参数

在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

我有一个ASP.Net站点(碰巧是MVC,但这与这里无关),其中有一些页面我希望缓存得非常好

具体而言,我希望实现:

  • 输出缓存在服务器上2小时
  • 如果服务器上的文件内容发生更改,则应刷新该页面的输出缓存
  • 在浏览器中缓存10分钟(即,甚至不要询问服务器是否有那么新鲜)
  • 当浏览器确实发出一个实际的后续请求时,我希望它使用etag,这样服务器就可以在不修改的情况下返回304
  • (注:以上时间值仅为指示性示例)

    • 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?接下来,这是如何解决的?它到底是如何失败的?