web缓存之--http缓存机制

一、web缓存可以分为数据库缓存、代理服务器缓存、浏览器缓存。

  其中浏览器缓存又包含很多内容:http缓存、indexDb、cookie、localStorage等。本片只讨论http缓存相关内容。

 

二、http缓存是通过头信息控制缓存。

  a. 分为强缓存和协商缓存两种。

  b. 强缓存如果命中,则不需要和服务器发生交互。

  c. 协商缓存不管是否命中,都要和服务器发生交互。

  d. 强缓存的优先级高于协商缓存。

 

三、强缓存。

  a. 可以理解为无需验证的缓存策略。

  b. 响应头中有两个字段来表明规则Expires/Cache-Control。

  c. Expires指定资源过期时间,超过这个时间点表明资源过期。是http1.0的标准。

  d. Cache-Control是http1.1的标准,优先级高于Expires。可能的取值有:max-age, s-maxage, public, private, no-cache, no-store, mast-revalidate。

  e. max-age指定资源过期时间,单位是s。在指定时间内直接使用缓存,不发送请求。

  d. s-maxage作用同max-age,但仅限于共享缓存,在私有缓存中被忽略。

  e. public表示响应既可以被代理服务器缓存又能被客户端缓存。

  f. private表示响应只能被客户端缓存。

  g. no-cache强制所有缓存了该响应的用户,在使用已缓存的数据前,发送带验证器的请求到服务器。

  h. no-store禁止缓存,每次请求都要向服务器重新获取。

  i. mast-revalidate表示如果缓存资源已过期则请求服务器重新拉取。

  

四、协商缓存。

  a. 缓存的资源到期了,不代表资源的内容发生了改变,如果和服务器上的资源没有差异,实际上没有必要再次请求。

  b. 浏览器第一次请求数据后会将数据和响应头部的缓存标识存储起来,再次请求时会带上存储的头部字段,服务器端验证是否可用。返回304代表资源没有发生改变可以使用缓存的数据,获得新的过期时间。返回200就相当于重新请求了一遍资源并替换旧资源。

  c. Last-modified  /  If-Modified-Since: Last-modified服务器端资源的最后修改时间,响应头部会带上这个标识。第一次请求后浏览器记录这个时间,再次请求时,请求头部带上

If-Modified-Since即之前记录下的时间。服务器端收到带If-Modified-Since的请求后回去和资源的最后修改时间对比。相等返回304,否则返回最新资,源状态码200。

  d. Etag  /  If-None-Match:原理同Last-modified  /  If-Modified-Since,只不过Etag是服务器端生成的一段hash字符串,精确度比laste-modified要高,属于强验证,要求资源字节级别的一致。

  

  

 

posted @ 2018-04-27 15:25  尹言覃少  阅读(446)  评论(0编辑  收藏  举报