关于 http 缓存,这些知识点你可能都不懂

  • 在地址栏输入 url 回车,强缓存什么时候失效,什么时候有效,你知道吗?

  • disk cache 和 memory cache 是什么?在哪里出现?

  • 火狐、IE 的缓存处理策略和 Chrome 一样吗?

  • cache-controlpublicprivate 你知道什么时候使用吗?

  • 你知道 ETag 可能也有不适用的时候吗?

  • 你知道 http 头中 Vary 和缓存有怎样的关系吗?

如果上面的问题你都懂了,那关掉这个页面吧;如果你喜欢本文,点一个赞吧~

先小小的回顾下

http header 描述 强缓存 协商缓存
Pragma 老版本的本地缓存机制,http 1.0 及以下

Expires 在此时候之后,响应过期,时间是绝对时间,受本地时间影响 *
Cache-Control 强缓存策略 Cache-Control: public, max-age=31536000, must-revalidate max-age是相对时间 *
Last-ModifiedIf-Modified-Since 资源最后被更改的时间,精确到秒
*
ETagIf-None-Match 资源的标识值,用来唯一的标识一个资源
*

处理优先级

在本地 Cache-Control > ExpiresPragma 在不支持 Cache-Control 时生效。

如果本地缓存过期,则要依靠协商缓存

ETag > Last-Modified

强缓存的 http 状态码是 200 OK

协商缓存的 http 状态码是 304 Not Modified

Cache-Control

  • public 表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存。

  • private 表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)。私有缓存可以缓存响应内容。

  • no-cache 即使有缓存也会向服务器发请求。

  • no-store 让客户端不要把资源存在缓存。

  • max-age=<seconds> 设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒)。与 Expires 相反,时间是相对于请求的时间。

  • s-maxage=<seconds> 覆盖 max-age 或者 Expires 头,但是仅适用于共享缓存(比如各个代理),私有缓存会忽略

问题 关于 publicprivate 的区别

翻译成中文:private 不允许代理缓存。举个例子,ISP 服务商可以在你的客户端和互联网之间加上不可见的代理,这个代理会缓存网页来降低带宽,客户端设置 cache-control: private 之后,可以指定 ISP 代理不允许缓存网页,但是允许最后的接受者缓存。而

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值