⚡ 30 秒速记

  • HTTP 缓存按新鲜度和验证器复用响应
  • 私有缓存与共享缓存的权限边界不同
  • 应用存储不自动理解失效、身份和数据版本
  • 内容指纹资源长缓存,入口保留更新路径
  • 缓存键、淘汰与退出登录清理一起设计

缓存是把已经获得的结果留着复用,但每层都要回答何时过期、谁能使用。 浏览器响应缓存按协议判断新鲜度,需要时再向服务器验证;应用放进本地存储的数据,则要自己管理版本、时效和身份切换。静态资源适合内容指纹与长缓存,用户数据必须明确隔离。优化命中率时也要验证更新路径,不能用更快的旧结果换来错误页面。

版本校准: 原理文章中的代码代表特定实现与写作时间。应用到当前项目时,应先确认浏览器、框架或工具的主版本,再区分稳定的规范语义、可变化的内部实现和项目自身约束。

# 一、请求响应头中关于缓存的奥秘

# 从 HTTP 开始

首先我们了解下 HTTP 的概念:

超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

以上我们不难发现 HTTP 是一种超文本传输协议,HTTP 协议用于客户端和服务端之间的通信(通过请求和响应的交换达成通信),请求必定由客户端发出,而服务端回复响应。

HTTP 请求部分又可以称为前端工程师眼中的 HTTP,它主要发生在客户端,请求是由“报文”的形式发送的,请求报文由三部分组成:请求行、请求报头和请求正文。同样 HTTP 响应部分的响应报文也由三部分组成:状态行、响应报头和响应正文。

这里我们拎出关键与缓存有关的请求报头和响应报头,也正是我们浏览器 Network 面板中常见的 Request Headers 和 Response Headers部分,以 Chrome 为例:

20211007134008.jpg

我们可以看到报头是由一系列中间用冒号 “:” 分隔的键值对组成,我们把它称为首部字段,其由首部字段名和字段值构成。如:

Content-Type: text/javascript

以上首部字段名为 Content-Type,首部字段值为 text/javascript,表示报文主体的对象类型。

首部字段又分为四种类型:

那么各类型的首部字段到底包含哪些首部?读者可以点击查阅以上各首部字段对应的 w3 文档进行查阅。比如通用首部字段包含了:

Cache-Control
Connection
Date
Pragma
Trailer
Transfer-Encoding
Upgrade
Via
Warning

与缓存无关的首部字段不在本小册的介绍范围内,下面我们重点介绍与缓存有关的首部字段名,为后续章节储备必要的知识。

webapp
公众号
开发者导航
切换夜间模式
点击侧边栏上一篇
点击侧边栏下一篇
折叠侧边栏
收起全部