1. 浏览器第一次向服务器请求<%@ OutPutCache %>标识的页面时,会在第15,16个管道事件中执行:
    • 将response的内容缓存到服务器的内存中
    • 将创建缓存的时间(即当时的DateTime.Now)保存到响应报文中的last-Modified 中
    • 为响应报文中的Exprise赋值:Exprise=last-Modified+duration
  2. 在第19个管道事件中将last-Modified和Exprise响应回浏览器
  3. 浏览器再次向服务器请求同一个页面时:
    • 浏览器首先会判断浏览器端的时间有没有超过Exprise.假如没有,则直接从浏览器缓存中获取结果显示给用户
    • 将上一次服务器发送回来的last-modified以If-Modified-Since重新发送给服务器,假如在缓存还没失效期间多次请求,则 If-Modified-Since不会
  4. 在第6,7个管道事件中,
    • 获取服务器当前时间
    • 判断服务器当前时间-If-Modified-Since是否大于duration,假如大于duration,则表示缓存失效,将在第八个事件中重新创建页面类的对象,在15,16个事件中更新缓存;假如小于duration,则表示缓存还没有失效,则直接从缓存中读取内容返回给浏览器,在第八个事件中不会创建页面类的对象,在第15,16个事件中不会更新缓存。
  5. 图解

 

posted on 2014-07-20 00:28  超文  阅读(139)  评论(0)    收藏  举报