缓存小记

可以从以下一二两个方面来考虑:
一、客户端浏览器自身的缓存控制(私有缓存)
  1.1:appcache (应用缓存)
    是从浏览器缓存中分出来的一块缓存区,通过manifest file控制
  1.2 :数据存储
    cookie stroge
二、缓存服务器的控制
  2.1:条件首部 If-Modified-Since
    这是缓存再验证的方法,当缓存过期不新鲜时,使用这个请求首部。
    将这个首部添加到get请求中去,就可以告诉服务器,只有在缓存了对象的副本之后并且又对其进行了
    修改的情况下,才发送此对象给我。如果未被修改服务器则会返回304,已修改就会200ok
·   2.2  HTTP/1.0的Expires首部和HTTP/1.1的Cache-Control:max-age响应首部
    max-age使用的是相对时间而不是绝对。
  例:Expires: Fri, 05 Jul 2018, 18:00:00 GMT
  Cache-Control: max-age=444444
  他们都是设置文档的过期时间
  设置之后,在缓存过期之前,无需与服务器联系,除非客户端请求中包含有阻止提供已缓存或未验证资
  源的首部

三、对一条HTTP GET报文的基本缓存处理过程包括七个部分:
  1.接收,读取抵达的请求报文
  2.解析,缓存对报文进行解析
  3.查询,查看是否有本地副本可用,如果没有就获取一份副本并将其保存在本地
  4.新鲜度检测,查看请求副本是否新鲜,否则就询问服务器是否有任何更新
  5.创建响应
  6.发送
  7.日志
四、客户端的新鲜度限制
  Cache-Control请求指令
  Cache-Control : max-stale = s 缓存可以随意提供过期的文件,如果指定了参数s,在这段时间内文
  档就不能过期。
  Cache-Control: min-fresh = s 至少在未来s秒内文档要保持新鲜
  Cache-Control : max-age = s 缓存无法返回缓存时间长于s秒的文档,
  Cache-Control : no-cache 除非资源进行再验证,否则这个客户端不会接受已缓存的资源
  Cache-Control : no-store 缓存应该尽快从存储器中删除


解决方案:
  1.对于静态文件例如图片,css,js文件等可以在路径后面加参数
    例:
    <img src="/images/header/hdgif.gif?v=1.2" class="gif_ico">
    如果对这张图片有修改,只要改变1.2的值,浏览器就会重新去获取
    相应的js文件css文件等都可以

    小幅度的文件替换和图片替换可以使用,但是大范围的更新,需要打包工具设置动态文件名。使用
    webpack

  2.根据上面的内容设置请求头和响应头来控制页面接口数据的缓存。

原文地址:https://www.cnblogs.com/jjucap/p/9197202.html