【问题标题】:Setting optimum http caching headers and server params in ASP.Net MVC and IIS 7.5在 ASP.Net MVC 和 IIS 7.5 中设置最佳 http 缓存标头和服务器参数
【发布时间】:2011-04-11 21:23:36
【问题描述】:

我有一个 ASP.Net 站点(恰好是 MVC,但在这里不相关),其中有几个页面我想缓存得很好。

具体我想实现:

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

(注意 - 以上时间值仅供参考)

  • 1) 和 2) 我可以通过 Response.Cache.SetCacheability(HttpCacheability.Server) 实现
  • 我知道 3) 可以通过使用 max-age 和 cache-control: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));

我想要的场景可能吗?特别是:

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

感谢您的任何提示!

【问题讨论】:

  • "Firefox ...确实发送了 etag" - 你的意思是在 If-None-Match 中?在这种特殊情况下,您是否使用 SetETagFromFileDependencies() 手动发出 ETag?
  • 跟进,这是如何解决的?它究竟是如何失败的?

标签: asp.net asp.net-mvc caching http-headers outputcache


【解决方案1】:

我不确定你是否已经解决了这个问题(几个月后......),但这应该是可能的。

SetMaxAge 应该设置“保证”新鲜时间的数量。如果您另外发送一个 ETag,您将满足 3 和 4。需求 1 和 2 可以通过您使用的任何服务器端缓存机制正交解决:我从未使用过这样的 ASP.NET 服务器端缓存,但是几乎可以肯定。

我会从您的回复中删除无关的标头,例如 SetRevalidation - 为什么有必要这样做?

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 2012-08-13
    • 2021-03-30
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    相关资源
    最近更新 更多