通用首部字段文
-
Cache-Control
控制缓存行为 -
Prama
值为"no-cache"时禁用缓存
请求首部字段
-
If-Match
比较ETag是否一致 -
If-None-Match
比较ETag是否不一致 -
If-Modified-Since
比较资源最后更新时间是否一致 -
If-Unmodifined-Since
比较资源最后更新时间是否一致
响应首部总段
ETag
资源的匹配信息
实体首部字段
-
Expires
实体主体过期时间 -
Last-Modified
资源的最后一次修改时间
缓存的分类
强缓存:通过响应头来实现,使得浏览器每次发出的请求资源都是来自服务器而不是用缓存。
-
Expires
(http1.0的产物)资源过期的时间,由服务器返回,受限于本地时间,如果本地时间修改那么可能会造成缓存失败,绝对时间。 -
Cache-Control
(http1.1)相对时间。
no-cache
可以缓存到本地,必须浏览器和服务器再验证,在验证之前是不可用的;
no-store
禁止缓存到本地;
public
可以被所有用户共享,包括代理服务器等;
private
只能被终端浏览器缓存。
Cache-Control
的优先级会高于Expires
- 应用场景
-
频繁变动的资源
-
缓存适用的是对数据一致性要求比较高的项目,比如金钱或者重要数据。
协商缓存:当请求没有命中强缓存,那么久会发送一个请求到服务器,由服务器来确定该资源是否可用。
Last-Modified
资源的最后一次修改时间,当浏览器发送请求的时候就会发送一个请求头If-Modified-Since
(上次服务器响应头中Last-Modified
的值),询问服务器该日期后资源是否有更新,有的话就会发送新的资源。
但是如果用户打开过本地资源甚至修改过,那么就又扯出来一个新的响应头,ETag
ETag
(http1.1的产物)相当于人的指纹一样,值是唯一的,只要是本地资源发生变化,那么该值都会发生变化。当浏览器发送新的请求的时候,就会发送一个请求头If-None-Match
(上次服务器响应头中的ETag
),询问该资源的ETag是否发生有更新,有的话就会发送新的资源。
304状态码就是基于这个
ETag
的优先级会高于Last-Modified
最后
大厂面试问深度,小厂面试问广度,如果有同学想进大厂深造一定要有一个方向精通的惊艳到面试官,还要平时遇到问题后思考一下问题的本质,找方法解决是一个方面,看到问题本质是另一个方面。还有大家一定要有目标,我在很久之前就想着以后一定要去大厂,然后默默努力,每天看一些大佬们的文章,总是觉得只有再学深入一点才有机会,所以才有恒心一直学下去。