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

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

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

具体来说,我想实现:

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

  • (注意 - 上述时间值仅供引用)
  • 1) 和 2) 我可以通过 Response.Cache.SetCacheability(HttpCacheability.Server)
  • 来实现
  • 我知道 3) 可以通过使用 max-age 和 cache-control:private
  • 来实现
  • 我可以使用 Response.Cache.SetETagFromFileDependencies(); 发出 etags;

  • 但我似乎无法让所有这些东西一起工作。这是我所拥有的:
        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 服务器端缓存,但是这几乎肯定是可能的。

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

    关于asp.net - 在 ASP.Net MVC 和 IIS 7.5 中设置最佳 http 缓存 header 和服务器参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3704433/

    相关文章:

    c# - 如何在内容页可访问的 asp.net 母版页中注册程序集?

    c# - 具有可变参数的 MVC Http Post 操作

    iphone - iOS - 异步缓存和加载图像

    asp.net-mvc - Orchard CMS中的YouTube视频

    java - Vertx 中的定时缓存

    ruby - 在 GitLab CI 包构建中缓存 gem

    asp.net - 运行计划任务的最佳方式

    c# - 当 IDENTITY_INSERT 设置为 OFF 时,无法在表 'userlogins' 中为标识列插入显式值?

    javascript - 如何从javascript(或JQuery)点击查询数据库?

    javascript - 通过 AJAX 将 JSON 对象发布到 ASP.NET Core Web API