强缓存协商缓存


强缓存

  1. 首先第一次请求,获取文件,返回expire过期时间,每次请求的时候判断该时间过不过期,不过期就命中缓存,从缓存读取
  2. 但是这种方式有缺陷,就是本地时间不准就完了
  3. 所以修改为,请求文件时携带一个cache-control:max-age:100;属性,代表缓存记录的时间,从第一次拿到该资源的时间向后保存100秒,如果100秒内仍然请求该文件就从缓存里拿

协商缓存

  1. 原本的协商缓存是记录文件的修改时间,第一次请求该资源时将资源的last-modify属性设置为上次修改时间之后每次请求都会携带该修改时间到ifmodify-since属性中,如果服务器本地修改时间和ifmodifysince属性相同就返回缓存重定向状态码304让客户端去缓存中取,否则就返回新资源
  2. 但是这种方法也有缺陷,就是文件修改了两次,但是文件内容根本没有更改,那文件时间已经改了就会返回新文件,这种就浪费资源了,解决办法就是用一个实体标签的属性,叫etag,客户端第一次访问服务端文件时服务端会根据文件内容做一次哈希运算生成一个文件指纹标示文件,并且之后客户端继续请求之后会在if-none-match属性中携带该属性,如果服务端的资源文件做出来的哈希值和客户端携带的该属性相同就去缓存中拿,否则就返回新资源

Author: pkq
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source pkq !
  TOC