【每日一题】浏览器缓存
人生苦短,总需要一点仪式感。比如学前端~
浏览器缓存主要分为四个阶段
强制缓存阶段
协商缓存阶段
启发式缓存阶段
缓存失败阶段
强制缓存阶段
先在本地查找该资源,如果有发现该资源,而且该资源还没有过期,就使用这一个资源,完全不会发送 http
请求到服务器。
判断过期通过Expires
(http1.1)或Cache-Control
(http1.1)来判断。具体可以看这篇文章:【每日一题】了解强缓存
协商缓存阶段
如果在本地缓存找到对应的资源,但是不知道该资源是否过期或者已经过期,则发一个 http
请求到服务器,然后服务器判断这个请求,如果请求的资源在服务器上没有改动过,则返回 304 Not Modified
,让浏览器使用本地找到的那个资源。
关于协商缓存的详细知识请看这篇文章:【每日一题】你了解协商缓存吗?
启发式缓存阶段
当缓存过期时间的字段一个都没有的时候,浏览器下次并不会直接进入协商阶段,而是先进入启发式缓存阶段
:它根据响应头中 2 个时间字段 Data
和 Last-Modified
之间的时间差值,取其值的 10% 作为缓存时间周期。
也就是说:当存有 Last-Modified
字段的时候,即使是断网,且强缓存都失效后,也有一段时间是直接读取缓存文件的。Etag
是没有这个阶段的。
缓存失败阶段
当服务器发现请求的资源已经修改过,或者这是一个新的请求(在本来没有找到资源),服务器则返回该资源的数据,并且返回 200
。
当然这个是指找到资源的情况下,如果服务器上没有这个资源,则返回 404
。
所有《每日一题》的 知识大纲索引脑图 整理在此:https://www.yuque.com/dfe_evernote/interview/everyday
你也可以点击文末的 “阅读原文” 快速跳转
让我们一起携手同走前端路!
关注公众号回复【加群】即可
评论