DNS缓存

  • 缓存URL与IP对应关系

CDN缓存

  • 服务器缓存,让申请到就近的服务器下面获取资源,自身有过期机制,过期会向根服务器申请资源

浏览器缓存

  • 分为强缓存和协商缓存
  • 缓存个别保留在内存或硬盘上
  • 个别把不须要频繁读取的文件放在硬盘上,如CSS,而须要频繁加载的内容保留在内存上,如JS,以缩小IO开销。
  • 缓存过程个别先从内存找,没有去硬盘找,再没有发动网络申请,而后缓存资源,以备下次应用。

强缓存

  • 无需发动网络申请,间接从本地读取缓存
  • 相干协定头:Expires、Cache-Control
  • Expires中能够设置一个相对过期工夫,浏览器会依据本地工夫比照,来判断是否曾经过期,从而选取读取缓存与否
  • Expires毛病是,所写的是相对工夫,本地工夫和服务器工夫可能存在偏差,导致资源不能及时更新
  • Cache-Control能够设置一个绝对工夫(max-age),以秒为单位
  • 浏览器读取到资源后依据Cache-Control的绝对工夫,计算其过期工夫,再下一次读取资源时回去判断是否过期,从而抉择读取缓存与否
  • Cache-Control中能够设置以下几个属性

    • no-cache,设置了即进行协商缓存
    • no-store,不缓存
    • public,除终端用户外,两头服务器如CDN等都能够对资源进行缓存
    • private,只有终端用户能够对资源缓存
  • Cache-Control比Expires优先级高

协商缓存

  • 与强缓存的区别是,须要额定发送一个申请至服务器,去判断是否须要更新资源,强缓存没有命中时会进行协商缓存
  • 相干协定头:Last-Modify/Last-Modify-Since、ETag/If-None-Match
  • Last-Modify是服务器返回给用户的,外面是一个工夫值,进行协商缓存时,用户会把该值放到Last-Modify-Since外面,返回给服务器,服务器依据该工夫判断资源是否更新,缓存是否过期,若无需更新,则返回304给服务器,服务器从缓存读取资源,若过期,则返回资源给用户,用户应用新资源,同时更新缓存
  • Last-Modify毛病是,资源可能只是周期更新,比方做流动,周一到周五资源都不一样,但每周一的资源是一样的,应用modify判断因为是工夫纬度的,所以每天都须要更新
  • ETag/If-None-Match逻辑与modify雷同,但其给每个资源分配了一个惟一的标记,依据该标记来判断是否须要更新资源,若同一个文件,其Etag扭转了,则须要更新,否则无需更新,所以可解决周期性更新的问题
  • ETag比Last/Modify优先级高,同时应用时,先判断ETag再判断Modify