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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (164)

我有一个ASP.NET站点(碰巧是MVC,但在这里不相关),有几个页面我非常喜欢缓存。

具体而言,我要做到:

  1. 输出缓存在服务器上2小时。
  2. 如果服务器上的文件内容发生变化,则应该为该页刷新该输出缓存。
  3. 在浏览器中缓存10分钟(即,甚至不要问服务器是否新鲜)
  4. 当浏览器发出实际的后续请求时,我希望它使用eTags,这样如果不修改服务器,服务器就可以返回304。

(以上的时间值只是指示性的例子)

  • ...
  • 我知道可以通过使用最大值和缓存控制来实现:私有。
  • 我可以使用Response.Cache.etETagFromFileDependents()发出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));

我想要的场景可能吗?尤其是:

  • 浏览器可以做3)和4)那样吗?当Firefox在本地缓存中过期后发出新请求时,它确实会发送之前响应过的服务器的etag,但我得到了200响应。
  • 设置像上面那样的变量,我会在哪里设置输出缓存的持续时间?
提问于
用户回答回答于

SetMaxAge应该设定“保证”新鲜时间的量。如果你另外发送一个ETag,你会满足3和4.要求1和2可以与你使用的任何服务器端缓存机制正交地解决:我从来没有像这样使用ASP.NET服务器端缓存,但这几乎肯定是可能的。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励