asp.net-mvc - 如何最好地使用 ASP.NET MVC 中的 Expires header ?

标签 asp.net-mvc outputcache

我希望能够为用户通过 GET 请求下载的某些项目设置较长的过期时间。

我想说“这有 10 分钟的好处”(即我想设置一个 Expires header +10 分钟)。请求是通过 AJAX 显示在页面中的 HTML 片段,它们对用户的 session 很有用。 我不想回到服务器并得到 304 如果他们再次需要它们 - 我希望浏览器缓存立即给我相同的项目。

我发现一篇关于 MVC Action filter caching and compression 的文章已经快一年了.这将创建一个自定义 ActionFilter 来更改 expires header 。我已经在使用压缩过滤器,它对我生成的一些自定义 css 非常有用(94% 的压缩率!)。

我有两个主要问题:

1)我真的必须使用这种方法吗?如果我这样做,我很好,但是 MVC 或 OutputCache 功能中真的没有功能可以为我执行此操作吗?在“传统” ASP.NET 中,我总是手动设置 Expires header ,但我们不能再这样做了 - 至少不在 Controller 中。

2)如果我确实使用这种过滤器方法 - 它是否会干扰 OutputCache 策略 - 我希望能够在 web.config 中进行控制。我有点认为这两者是相互排斥的,你不会想要两者 - 但我不完全确定。

最佳答案

  • 不,您不必使用此方法。但是,我认为这可能是最好的选择方法,因为它使 Controller 更易于测试并且更少感知网络。另一种方法是在 Controller 中手动设置标题,如下所示:

    Response.AddHeader("Expires", "Thu, 01 Dec 1994 16:00:00 GMT");
  • 好吧,OutputCache 属性控制操作何时运行,以及何时返回缓存的 HTML。 Expires 告诉浏览器何时重新获取 HTML。所以我不会称它们为相互排斥的,但它们肯定是同一枚硬币的两个方面,你认为你可能不需要两者都是正确的。我建议查看 the HTTP spec决定什么最适合您的应用程序。
  • 关于asp.net-mvc - 如何最好地使用 ASP.NET MVC 中的 Expires header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/552710/

    相关文章:

    asp.net-mvc - 使用输出缓存和其他操作过滤器

    html - 拉伸(stretch) TextAreaFor 并处理未确定长度的列表

    c# - 阻止用户两次登录 Web 应用程序的最简单方法是什么

    javascript - jquery.dataTables.min.js :48 Uncaught TypeError: Cannot read property 'length' of undefined

    c# - 使用 ASP.NET MVC OutputCache,同时根据用户是否经过身份验证改变 View 内容

    azure - Azure 中具有 MVC 和 ASP.NET Core 的 Outputcache IIS

    sql-server - 创建 MVC4 成员数据库

    asp.net-mvc - ASP.NET Core MVC 应用程序中的总命中/访问者计数器

    asp.net - 列出 OutputCache 条目

    asp.net-mvc - 如何删除 ChildAction 上的 OutputCache?