多语言展示
当前在线:1346今日阅读:39今日分享:10

如何使用ASP.NET HTTP缓存以及如何实现304机制

众所周知HTTP页面缓存的好处就是可以缓存页面,当用户访问网页后续再访问,不会再次请求服务器,这样就可以减少对服务器的访问次间接性缓解了服务器压力,因此使用这一个技术可以改善服务器的性能。 首先我们来看一张没有缓存的页面效果图,测试工具是用的Firefox浏览器测试的。从图中我们可以看到状态是200,这是服务器的HTTP响应状态,我们还可以看到页面的响应时间用了1.44s,另外我标红了响应头当页面缓存后这里会发生变化。 下面我们就来介绍如何使用ASP.NET HTTP页面缓存.
工具/原料

Microsoft Visual Studio2012 MVC3.0

方法/步骤
1

要使用HTTP页面缓存欠侵冲实际上就是对Response.Cache的使用,下面我们来看代码:protected ActionResult Page_Load(object sender, EventArgs e){ TimeSpan cacheDuration = new TimeSpan(24, 0, 0);                System.Reflection.FieldInfo maxAge = System.Web.HttpContext.Current.Response.Cache.GetType().GetField('_maxAge',                   System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);                maxAge.SetValue(System.Web.HttpContext.Current.Response.Cache, cacheDuration);          System.Web.HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public);          System.Web.HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.Add(cacheDuration));           System.Web.HttpContext.Current.Response.Cache.AppendCacheExtension('max-age=' + cacheDuration.TotalSeconds + ''); System.Web.HttpContext.Current.Response.Cache.SetETag(strReturn.Length.ToString()); return View();}上面的代码基本上就可以实现缓存了,然后让我们来看以下效果图:

3

下面我们来看一下实现304应答的代码: public ActionResult Page_Load(object sender, EventArgs e)    {       DateTime dt;        if( DateTime.TryParse(Request.Headers['If-Modified-Since'], out dt) ) {                       if( (DateTime.Now - dt).TotalSeconds < 60.0 ) {                      Response.StatusCode = 304;               Response.End();              return;            }        }           Response.Cache.SetLastModified(DateTime.Now);   return View();  }当用户第一次请求页面时,会调用Response.Cache.SetLastModified,它会在响应时输出一个'Last-Modified'这个响应头, 然后,当浏览器再次访问这个页面时,会将上次请求所获取的'Last-Modified'头宿陵的内容 , 以'If-Modified-Since'这个请求头的形式发给服务端,此时服务器就可以根据具体逻辑来判断肤场要不要使用304应答了。上面代码我们判断如果是60秒以内我们就以304方式响应。下面我们来看以下效果图:

4

很显然上图的状态变成了'304 Not Modified' 这个时候即使是用户一直强制刷新页面,请不会去请求服务器了,这样就避免了不必要的访问,一定程度上缓解了服务器压力。

推荐信息