【发布时间】:2011-10-02 21:37:51
【问题描述】:
在我工作的公司,我们有一个使用 ASP.NET MVC2 开发并托管在 IIS7 上的 Web 应用程序。
在一个特定的动作中,我们返回一个持有数组的 JsonResult 对象。该数组每天更新;因此,同一天发出的任何请求都会得到相同的响应。
public ActionResult SomeAction(int id)
{
// Some calculations
return Json(resultArray, JsonRequestBehavior.AllowGet);
}
由于操作成本高昂,我们希望通过浏览器缓存等来提高性能。
我添加了一个缓存头,所以我们告诉用户浏览器缓存结果直到数据库的下一次更新。
除此之外,我想添加一个“Last-Modified”标头,因此浏览器会询问是否在指定日期之后修改了源。
有什么方法可以做到这一点?我想检查在浏览器询问的日期(Last-Modified 标头)之后是否修改了 DB,如果没有修改,我想返回 304,只是 IIS 自动为静态文件(图像、css 和 js 文件等)所做的
【问题讨论】:
-
是的,但是 outputcache 属性需要编译时定义的持续时间,我需要在运行时检查数据库的最后修改日期。
-
没错。但你的实际问题是什么?听起来你已经弄清楚了一切。如果你设置了 Expires 和 Last-Modified 以及 Cache-Control 的东西,难道不应该一切正常吗?
-
我正在成功使用 Expires、MaxAge、Cacheability。但我不知道如何使用 Last-Modified 标头并检查浏览器是否在询问“If-Modified-Since”标头。所以现在,如果浏览器发送带有“If-modified-since”标头的请求,我会以任何方式发送 HTTP200。顺便感谢您的帮助:)
标签: asp.net asp.net-mvc-2 browser-cache http-status-code-304