gpt4 book ai didi

带有 HTTP304 状态码的 ASP.NET MVC2 浏览器缓存

转载 作者:行者123 更新时间:2023-12-04 06:12:25 25 4
gpt4 key购买 nike

在我工作的公司中,我们有一个使用 ASP.NET MVC2 开发并托管在 IIS7 上的 Web 应用程序。

在特定操作中,我们返回一个包含数组的 JsonResult 对象。该数组每天更新;因此,同一天发出的任何请求都会得到相同的响应。

public ActionResult SomeAction(int id)
{
// Some calculations
return Json(resultArray, JsonRequestBehavior.AllowGet);
}

由于操作成本高昂,我们希望通过浏览器缓存等来提高性能。

我添加了一个缓存头,所以我们告诉用户浏览器缓存结果,直到数据库的下一次更新。

除此之外,我想添加一个“Last-Modified”标题,所以浏览器会询问源是否在指定日期之后被修改。

实现它的方法是什么?我想检查在浏览器询问的日期(Last-Modified header )之后是否修改了 DB,如果没有修改,我想返回 304,只是 IIS 自动对静态文件(图像、css 和 js 文件等)执行

最佳答案

添加一个真实的Last-Modified标题。如果您的数据每天更新,您应该知道什么时候更新,对吗?

然后,在 action 方法的开头,为传入的 If-Modified-Since 添加一个检查。通过解析 HTTP 请求中的日期时间字符串并检查数据的实际上次修改时间。如果数据没有被修改,只需return 304 manually .如果有,请执行 action 方法通常执行的操作。

您也可以(或改为)返回 ETag随着您的内容,其值必须随着内容的变化而改变。

然后将整个内容包装为 ASP.NET MVC Action Filter为了可重用性。

那么post about it on your blog. :)

为了防止行为不端的客户端和不缓存任何内容的客户端(可能您的数据是由应用程序而不是桌面浏览器加载的),您可以将操作方法​​的结果存储在 ASP.NET 输出缓存中,以避免昂贵的操作。你可能会 have to VaryByCustom 不过要实现绝对到期。

关于带有 HTTP304 状态码的 ASP.NET MVC2 浏览器缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7629398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com