我们现在浏览器里随便抓一个请求的header。
图片中有个字段cache-control. 这个字段就是我们今天要讲解的。
一 cache-control 是干什么的?
cache-control 本身就是控制缓存行为的。通过给这个字段设置不一样的值,来控制缓存的工作机制。
这个字段请求和响应的header 都会包含这个字段。下面我们分别列举下请求里的可取值范围以及响应的可取值范围。
二 请求取值范围
类型 | 指令 | 参数 | 说明 |
表示是否能缓存 | no-cache | 无 | 强制向源服务器再次验证 |
控制可执行缓存对象 | no-store | 无 | 不缓存请求或响应的任何内容暗示请求中包含机密 |
指定缓存期限和认证 | max-age = [ 秒] | 必需 | 响应的最大Age值缓存资源时间 < 指定值,客户端用缓存值。为0, 不使用缓存。 |
指定缓存期限和认证 | max-stale( = [ 秒]) | 可省略 | 接收已过期的响应 |
指定缓存期限和认证 | min-fresh = [ 秒] | 必需 | 期望在指定时间内的响应仍有效 |
指定缓存期限和认证 | no-transform | 无 | 代理不可更改媒体类型 |
指定缓存期限和认证 | only-if-cached | 无 | 从缓存获取资源 |
cache-control的扩展 | cache-extension | - | 新指令标记(token) |
三 响应取值范围
指令 | 参数 | 说明 | |
表示是否能缓存 | public | 无 | 可向任意方提供响应的缓存其他用户也可利用缓存 |
表示是否能缓存 | private | 可省略 | 仅向特定用户返回响应只对特定用户提供缓存 |
表示是否能缓存 | no-cache | 可省略Location | 缓存前必须先确认其有效性不缓存请求或响应的任何内容如果取值为Location,仅对Location不缓存,其他缓存。 |
控制可执行缓存对象 | no-store | 无 | 不缓存请求或响应的任何内容暗示响应中包含机密内容 |
指定缓存期限和认证 | no-transform | 无 | 代理不可更改媒体类型 |
指定缓存期限和认证 | must-revalidate | 无 | 可缓存但必须再向源服务器进行确认 |
指定缓存期限和认证 | proxy-revalidate | 无 | 要求中间缓存服务器对缓存的响应有效性再进行确认 |
指定缓存期限和认证 | max-age = [ 秒] | 必需 | 响应的最大Age值缓存资源时间 < 指定值,客户端用缓存值。 |
指定缓存期限和认证 | s-maxage = [ 秒] | 必需 | 公共缓存服务器响应的最大Age值 |
cache-control的扩展 | cache-extension | - | 新指令标记(token) |
你学会了吗?
如果觉得阿萨的内容对你有帮助,欢迎围观点赞。