HTTP 强缓存和协商缓存
2023-03-01
次访问
http 强缓存和协商缓存
一、缓存介绍
1、什么是缓存?
缓存是一种保存资源副本并在下次请求时直接使用该副本的技术。
2、为什么需要缓存?
如果没有缓存的话,每次网络请求都要加载大量的图片和资源,这会使页面的加载变慢许多。
缓存的目的就是为了尽量减少网络请求的体积和数量,让页面加载的更快,节省带宽,提高访问速度,降低服务器压力。
3、哪些资源可以被缓存?——静态资源(css、js、img)
网站的 html 是不能被缓存的。因为网站在使用过程中 html 随时有可能被更新,随时有可能被替换模板。
网页的业务数据也是不能被缓存的。比如留言板和评论区,用户随时都可以在底下评论,那数据库的内容就会被频繁被更新。
二、强制缓存
1、定义
强缓存:浏览器不会向服务器发送任何请求,直接从本地缓存中读取文件并返回。
- 200 (from memory cache): 不访问服务器,一般已经加载过该资源且缓存存在了内存当中,直接从内存中中读取缓存。浏览器关闭后,数据将不存在(资源被释放掉了),再次打开相同的页面时,不会出现from memory cache。
- 200 (from disk cache): 不访问服务器,已经在之间某个时间加载过该资源,直接从磁盘中读取缓存,关闭浏览器后,数组依然存在,因为是存在硬盘当中的,下次打开仍会from disk cache。
注意:
优先访问memory cache,其次是disk cache,最后是请求网络资源
2、设置强缓存的方式 Expires & Cache-Control
- Expires: 该值是一个GMT时间格式字符串,浏览器进行第一次请求时,服务器会在返回头部加上Expires。下次请求,如果设置了时间,并在设置的时间之前就可以直接读取缓存。
- Cache-Control: 该值是利用max-age判断缓存的生命周期,以秒为单位,如果在该生命周期内,则命中强缓存。比如max-age=300 ,则代表在这个请求正确返回时间的5分钟内再次加载资源,就会命中强缓存。
三、协商缓存
1、定义
协商缓存是一种服务端缓存策略,即通过服务端来判断某件事情是不是可以被缓存。
服务端判断客户端的资源,是否和服务端资源一样,如果一致则返回304,反之返回200和最新的资源。
2、设置协商缓存的方式
- Last-Modified , If-Modified-Since
Last-Modified 资源最后修改的时间,对应请求头为 If-Modified-Since,Last-Modified 只能精确到秒级
2)Etag,If-None-Match
Etag 资源唯一标识,所谓唯一,可以想象是每个人的身份证,具有唯一性;Etag本质是一个字符串;对应请求头为 If-None-Match
四、刷新操作对缓存的影响
1、正常操作
定义: 地址栏输入 url ,跳转链接,前进后退等。
对缓存的影响: 强制缓存有效,协商缓存有效。
2、手动刷新
定义: F5 ,点击刷新按钮,右击菜单刷新。
对缓存的影响: 强制缓存失效,协商缓存有效。
3、强制刷新
定义: ctrl + F5 。
对缓存的影响: 强制缓存失效,协商缓存失效。
