缓存是一种保存资源副本并在下次请求时直接使用该副本的技术
缓存控制
Cache-control 头
属性值 | 功能 | 说明 |
|
禁止进行缓存 | 缓存中不得存储任何关于客户端请求和服务端响应的内容 |
|
强制确认缓存 | 每次有请求发出时,缓存会将此请求发到服务器,服务器端会验证请求中所描述的缓存是否过期,若未过期(注:实际就是返回304),则缓存才使用本地缓存副本 |
|
私有缓存 | 表示该响应是专用于某单个用户的,中间人不能缓存此响应,该响应只能应用于浏览器私有缓存中 |
|
公共缓存 | 表示该响应可以被任何中间人(译者注:比如中间代理、CDN等)缓存 |
|
缓存过期机制 | 表示资源能够被缓存(保持新鲜)的最大时间 |
|
缓存验证确认 | 缓存在考虑使用一个陈旧的资源时,必须先验证它的状态,已过期的缓存将不被使用 |
Pragma
头
是HTTP/1.0标准中定义的一个header属性,请求中包含Pragma的效果跟在头信息中定义Cache-Control: no-cache相同,通常定义Pragma以向后兼容基于HTTP/1.0的客户端
缓存验证
ETag
如果资源请求的响应头里含有ETag, 客户端可以在后续的请求的头中带上 If-None-Match
头来验证缓存
对比资源的签名判断是否使用缓存
配合 If-Match 或 If-Non-Match 使用
Last-Modified
弱校验器,只能精确到一秒。如果响应头里含有这个信息,客户端可以在后续的请求中带上 If-Modified-Since
来验证缓存
对比上次修改时间以验证资源是否需要更新
配合 If-Modified-Since 或 If-Unmodified-Since 使用
带Vary头的响应
Vary
HTTP 响应头决定了对于后续的请求头,判断是请求一个新的资源还是使用缓存的文件。
当缓存服务器收到一个请求,只有当前的请求和原始(缓存)的请求头跟缓存的响应头里的Vary都匹配,才能使用缓存的响应