首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ASP.Net MVC和IIS7.5中设置最佳的http缓存头和服务器参数

在ASP.Net MVC和IIS7.5中设置最佳的http缓存头和服务器参数
EN

Stack Overflow用户
提问于 2010-09-14 05:06:50
回答 1查看 1.9K关注 0票数 18

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

具体地说,我希望实现:

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

(注-以上时间值仅为指示性示例)

Response.Cache.SetCacheability(HttpCacheability.Server)

  • I

  • 1)和2)我可以通过最大年龄实现3)可以通过使用最大年龄实现,并且cache-control:private

  • I可以通过Response.Cache.SetETagFromFileDependencies();

发出etags

但我似乎不能让所有这些东西一起工作。这就是我所拥有的:

代码语言:javascript
复制
    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响应。
  • 设置变量如上所述,我将在何处设置输出缓存的持续时间?

谢谢你的建议!

EN

回答 1

Stack Overflow用户

发布于 2011-01-31 23:46:26

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

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

我会从你的响应中删除无关的报头,比如SetRevalidation --为什么这是必要的?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3704433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档