关于缓存的问题浅谈(初稿)

以目前我所做的项目为例,缓存是分为3部分。

1.客户端(浏览器缓存):

  可以看到下图中的状态码是200 (from cache),这种情况下,浏览器直接读取了缓存,而没有向服务器发送请求。

  

  下图这种情况下,是浏览器向服务器发送了消息,但是根据Last-Modified和ETags等信息,服务器返回了304,依旧读取的浏览器缓存。

  

2.代理服务缓存:

  比如阿里云,当一个项目先走了代理,再走服务器的情况下,代理是可以在做一层缓存机制的。比如下图中以x-开头的就是阿里返回的信息

  

3.cdn、服务器缓存

  如果没有代理那一层的话,这一步就相当于上一层,也是判断Last-Modified和ETags等信息,返回200或304等状态信息。

 

Cache-control  百度百科

  浏览器是不是请求服务器或者走缓存是由Cache-control来控制的,简单来说只有点了刷新页面时,才会跳过Cache-control,强行请求服务器,否则都是会依据Cache-control来决定是否请求的。

1) 打开新窗口

值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。
而如果指定了max-age值,那么在此值内的时间里就不会重新访问服务器,例如:
Cache-control: max-age=5(表示当访问此网页后的5 秒 内再次访问不会去服务器)

2) 在地址栏回车
值为private或must-revalidate则只有第一次访问时会访问服务器,以后就不再访问。
值为no-cache,那么每次都会访问。
值为max-age,则在过期之前不会重复访问。

3) 按后退按扭
值为private、must-revalidate、max-age,则不会重访问,
值为no-cache,则每次都重复访问

4) 按刷新按扭
  无论为何值,都会重复访问

  

  

  

 

posted @ 2016-07-12 15:33  三行代码走天下  阅读(163)  评论(0编辑  收藏  举报