浏览器缓存小结

原文链接:浏览器缓存

浏览器缓存

强缓存 & 协商缓存

  • 强缓存
    释义: 客户端第一次问服务器要某个资本时,服务器丢还给客户端所请求的这个资本同时,通知客户端将这个资本保存在当地,并且在将来的某个时点之前假如还须要这个资本,直接从当地猎取就好了,不必向服务器请求.这类体式格局缓存下来的资本称为强缓存.

    Expires & Cache-Control:max-age

    • Expires:
      该字段是http1.0时的范例,值为一个相对时候的GMT花样的时候字符串,代表缓存资本的逾期时候,在这个时点之前,即掷中缓存.
    • Cache-Control:
      该字段是http1.0时的范例,值为一个相对时候的GMT花样的时候字符串,代表缓存资本的逾期时候,在这个时点之前,即掷中缓存.
      参数:
      no-cache: 假如请求头部包括no-cache指令,示意客户端不吸收缓存过的响应.中心缓存服务器必须将请求转发给给源服务器. 浏览器强迫革新(window下ctrl+F5)就是这个道理,所以的请求都设置no-cache
      no-store: 暗示要乞降响应包括秘要信息,不能举行缓存.
      辨别: no-store才是真正的不缓存
      max-age: 该指令用来标识缓存资本的最大有效期. 假如max-age=0,就会向源服务器发送请求举行缓存资本新颖度的考证.浏览器平常革新F5

      cache-directive 作为请求首部时,cache-directive 的可选值有:

      字段称号申明
      no-cache示知(代办)服务器不直接运用缓存,请求向原服务器提议请求.
      no-store一切内容都不会保存到缓存或许Internet临时文件中.
      max-age=delta-seconds示知 (代办)服务器,客户端愿望吸收一个存在时候不大于detal-seconds秒的资本.
      max-stale[=delta-seconds示知 (代办)服务器,客户端情愿吸收一个凌驾缓存时候的资本,如有定义delta-seconds则为delta-seconds,若没有则为恣意超越的时候.
      min-fresh=delta-seconds示知 (代办)服务器,客户端愿望吸收一个在小于delta-seconds秒内被更新过的资本.
      no-transform示知 (代办)服务器,客户端愿望猎取实体数据没有被转换(比方紧缩)过的资本.
      only-if-cached示知 (代办)服务器,客户端愿望猎取换成的内容(如有),而不必向本来服务器请求.
      cache-extension自定义扩大值,若服务器不辨认改值则会被疏忽.

      cache-directive 作为响应首部时,cache-directive 的可选值有:

      字段称号申明
      public表明任何情况下都得缓存该资本(即使是须要HTTP认证的资本).
      Private[=”field-name”]表明返回报文中悉数或许部份(若指定field-name,则为field-name的字段数据)仅开放给某些用户(服务器指定的share-user,如代办服务器)做缓存运用,其他用户则不能缓存这些数据.
      no-cache不直接运用缓存,要向服务器提议(新颖度校验)请求.
      no-store一切内容都不会保存到缓存或许Internet临时文件中.
      no-transform示知客户端缓存文件时不得对实体数据做任何转变.
      only-if-cached示知(代办)服务器,客户端愿望猎取缓存的内容(假如有),而不向本来服务器提议请求.
      must-revalidate当前资本一定是向原服务器提议考证请求的,若请求失利会返回504(而非代办服务器上的缓存).
      proxy-revalidate与must-revalidate相似,但仅能应用于同享缓存(如代办).
      max-age=delta-seconds示知客户端,该资本在delta-seconds秒内是新颖的,无需向 服务器提议请求.
      s-max-age=delta-seconds同max-age,但仅用于同享缓存(如代办).
      cache-extension自定义扩大值,若服务器不辨认改值则会被疏忽.

      在请求头中max-age=0与no-cache的区分?

         返回的状况来看:no-cache都是200,而max-age多是304(假如浏览器有缓存).  
         请求参数:max-age请求头平常会照顾If-Modified-Since或If-None-Match字段举行新颖度考证,而no-cache不会照顾. F5革新是max-age=0来完成,而强迫革新(Ctrl+F5)是经由过程no-cache完成.  

异同:
Expires是HTTP 1.0+的首部,用来指定一个相对的逾期日期,依靠客户端时候设置的准确性,缓存时候是相对服务器上的时候而言的.


max-age是HTTP/1.1的Cache-Control的一个字段,用来指定文档的最大运用时候.

  • 协商缓存
    释义: 客户端第一次问服务器要某个资本时,服务器丢还给客户端所请求的这个资本同时,将该资本的一些信息(文件择要、或许末了修正时候)也返回给客户端,通知客户端将这个资本缓存在当地.当客户端下一次须要这个资本时,将请求以及相干信息(文件择要、或许末了修正时候)一并发送给服务器,由服务器来推断客户端缓存的资本是不是须要更新:如不须要更新,就直接通知客户端猎取当地缓存资本;如须要更新,则将最新的资本连同响应的信息一并返回给客户端.

    Last-Modified & If-Modified-Since & Etag & If-None-Match

    • Last-Modidied & If-Modified-Since:

      • Last-Modified: 为实体首部字段,值为资本末了更新时候,随服务器response返回.
      • If-Modified-Since: 为请求首部字段,经由过程比较两个时候来推断资本在两次请求时期是不是有过修正,假如没有修正,则掷中协商缓存,浏览器从缓存中猎取资本;假如有过修正,则服务器返回资本,同时返回新的Last-Modified时候.
    • Etag & If-None-Match:

      • Etag: 为响应头部字段,示意资本内容的唯一标识,随服务器response返回.
      • If-None-Match: 为请求头部字段,服务器经由过程比较请求头部的If-None-Match与当前资本的ETag是不是一致来推断资本是不是在两次请求之间有过修正,假如没有修正,则掷中协商缓存,浏览器从缓存中猎取资本;假如有过修正,则服务器返回资本,同时返回新的ETag.
  • 不能缓存的请求

    1. HTTP信息头中包括Cache-Control:no-cache,pragma:no-cache(HTTP1.0),或Cache-Control:max-age=0等通知浏览器不必缓存的请求. Cache-Control: no-cache:这个很轻易让人产生误解,使人误以为是响应不被缓存.实际上Cache-Control: no-cache是会被缓存的,只不过每次在向客户端(浏览器)供应响应数据时,缓存都要向服务器评价缓存响应的有效性.
    2. 须要依据Cookie,认证信息等决议输入内容的动态请求是不能被缓存的.
    3. 经由HTTPS平安加密的请求.
    4. POST请求没法被缓存.
    5. HTTP响应头中不包括Last-Modified/Etag,也不包括Cache-Control/Expires的请求没法被缓存.
  • 浏览器缓存机制示意图

《浏览器缓存小结》

    原文作者:夜暁宸
    原文地址: https://segmentfault.com/a/1190000017154757
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞