强缓存和协商缓存
强缓存
强缓存就是本地缓存。浏览器请求资源后,会把不常更改的资源,比如图片、CSS文件,存到本地缓存。那么下次请求的时候,浏览器会首先获取header信息,根据Cache-Control和expires判断本地缓存是否过期。
没过期就直接从缓存中取,过期了就再向服务器请求资源再缓存。
expires是相对时间,就是可以人为改。
Cache-Control是绝对时间,优先级更高。
协商缓存
服务器用来确定缓存资源是否过期。
看header中的Last-Modified和If-Modified-Since、Etag和If-None-Match
Last-Modified和If-Modified-Since
Last-Modified:浏览器第一次向服务器请求资源时,服务器会在资源的响应头中加上Last-Modified,表示该资源在服务器的最新修改时间
If-Modified-Since:浏览器再次请求资源时,请求头里加上If-Modified-Since,值是上一次请求资源时返回的Last-Modified时间。对比这个资源的当前最新修改时间和If-Modified-Since,来决定要不要更新,已经最新了就返回304
Etag和If-None-Match
Etag:⽐较⽂件指纹(根据⽂件内容计算出的唯⼀哈希值)
这个和Last-Modified/If-Modified-Since处理逻辑一致,但是弥补了不足。
1.Last-Modified精确到秒,如果某些资源在1秒钟以内,被修改多次的话,它将不能准确标注文件的修改时间
2.文件本身没修改,比如说改了文件名再改回来,时间也会被刷新
Etag/If-None-Match的优先级高于Last-Modify/If-Modify-Since
Etag也有缺点:开销大