其他分享
首页 > 其他分享> > 【前端 · 面试 】HTTP 总结(八)—— HTTP 强缓存

【前端 · 面试 】HTTP 总结(八)—— HTTP 强缓存

作者:互联网

最近我在做前端面试题总结系列,感兴趣的朋友可以添加关注,欢迎指正、交流。

争取每个知识点能够多总结一些,至少要做到在面试时,针对每个知识点都可以侃起来,不至于哑火。

HTTP 强缓存和协商缓存

前言

通过上一篇的总结,我们知道 HTTP 缓存分为两种:

HTTP 缓存分类

今天我们就先来了解一下强缓存相关的内容。

强缓存

特点

强缓存中,当请求再次发出时,浏览器会判断目标资源是否“命中”强缓存,如果命中则直接从缓存中获取资源,不会再与服务端发生通信。

在 Chrome 中,命中强缓存的情况下, Network 中显示的 HTTP 状态码是 200 ,比如:

image-20210808211159084

规则

强制缓存的请求结果有两种情况:

命中缓存

image-20210808212126564

未命中缓存

image-20210808212546662

分类

在 Chrome 中,强缓存又分为:

缓存存放的位置是由浏览器控制的。

image-20210808210306482

如果不想从强缓存中获取资源,Windows 电脑可以通过 Ctrl + F5 刷新页面,Mac OS 可以通过 Shift + Command + R 刷新页面,刷新后你可以看到资源不会出现 from disk(or memory) cache 了。

属性

是否强缓存由以下 3 个 Header 属性共同来控制:

Expires

Expires 的值是一个 HTTP 日期,当服务器返回响应时,在 Response Headers 中将过期时间写入 Expires 字段。

在浏览器发起请求时,会根据系统时间和 Expires 的值进行比较,如果系统时间超过了 Expires 的值,缓存失效,会继续从服务器获取资源,比如:

image-20210808211410000

Expires 的值是一个绝对时间,可以看到上图中的时间点:2021 年 8 月 15 日 07:16:53,这代表:这个资源在这个时间点之前都可以直接从缓存中获取。

但是,使用 Expires 会存在一个问题:由于 Expires 的时间戳是服务器定义的,而本地时间的取值来自客户端,因此 Expires 的工作机制对于客户端时间和服务器时间的一致性要求极高,如果两者的时间存在时差,会带来意料之外的结果。

Expires 的优先级在三个 Header 属性中是最低的。

Expires 字段是 HTTP 1.0 时代的产物,现在的浏览器用的全都是 HTTP 1.1 了,所以这个字段的作用基本可以忽略 。

Cache-Control

是 HTTP 1.1 中新增的属性,为了弥补 Expires 缺陷提出的,提供了更精确细致的缓存功能。Cache-Control 在请求头和响应头中都可以使用:

请求头Cache-Control 字段列表:

响应头Cache-Control 字段列表:

Cache-Control 常见字段的含义:

image-20210808214220870

图中 Cache-Control 仅指定了 Max-age,所以默认为 private,缓存时间为 31536000 秒(365 天),也就是说,在 365 天内再次请求这条数据,都会直接获取缓存数据库中的数据,直接使用。

在 HTTP 1.1 标准试图将缓存相关配置收敛进 Cache-Control 这样的大背景下, Max-age 可以视作是对 Expires 能力的补位/替换。在当下的前端实践里,我们普遍会倾向于使用 Max-age。但如果你的应用对向下兼容有强诉求,那么 Expires 仍然是不可缺少的。

Pragma

Pragma 只有一个属性值,就是 no-cache ,效果和 Cache-Control 中的 no-cache 一致,不使用强缓存,需要与服务器验证缓存是否新鲜,在 3 个头部属性中的优先级最高。

总结

~

~本文完,感谢阅读!

~

学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!

大家好,我是〖编程三昧〗的作者 隐逸王,我的公众号是『编程三昧』,欢迎关注,希望大家多多指教!

你来,怀揣期望,我有墨香相迎! 你归,无论得失,唯以余韵相赠!

知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!

标签:Control,control,缓存,HTTP,Cache,面试,Expires
来源: https://www.cnblogs.com/bianchengsanmei/p/15116522.html