首页 > 代码库 > IE缓存机制

IE缓存机制

前提 :

 IE有个缓存机制,对请求的url进行判断,发现短时间内请求的url相同,则使用缓存的数据,而不是去重新向服务器获取一次数据。数据缓存也有好处,但对于需要经常去后台获取数据更新的需求来说,这就是个麻烦了。那怎么解决这个问题呢?既然是对相同的url认为是重复请求,那我就想办法每次请求的url值都不相同,同时还保证是我要的数据。我们采用在url中增加一个无用的参数,且这个参数每次都在变(时间!)。
 
设置缓存方式
 

首先是Cache-Control。它用来指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache -Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max- stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage。我们来说说响应消息,因为 它是服务器发出的,对于客户端和Cache System都有非常重要的意义:
Public    指示响应可被任何缓存区缓存。
Private    指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache    指示请求或响应消息不能缓存
no-store    用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存
max-age    指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
no-transform     不允许转换存储系统
must-revalidate  使得客户端再次浏览当前页时必须发送相关 HTTP 头信息到服务器进行验证,然后才决定是否加载客户端本地 cache

 
 
Response.CacheControl = "no-cache"; 

  

eg

        [HttpGet]
        public JsonResult GetOnlyCode(int id)
        {
            Response.CacheControl = "no-cache";   
            bool isDisplayAll = (id == 1) ? true : false;
            try
            {

                List<SelectListItem> model = _service.GetOnlyCode(isDisplayAll);

                return Json(model, JsonRequestBehavior.AllowGet);
            }
            catch (Exception)
            {
                return Json(JsonHandler.CreateMessage(0, "得到所有的纸箱型号出错。"), JsonRequestBehavior.AllowGet);
            }

        }

  

 

IE缓存机制