HTTP协议的缓存

HTTP协议的缓存

HTTP的缓存主要是通过请求和相应报文头部的几个字段来控制缓存的。

  • Cache-Control:通用消息头字段,被用于在http请求和响应中,通过指定指令来实现缓存机制
  • Etag:HTTP响应头是资源的特定版本的标识符。这可以让缓存更高效,并节省带宽,因为如果内容没有改变,Web服务器不需要发送完整的响应。而如果内容发生了变化,使用ETag有助于防止资源的同时更新相互覆盖。

Cache-Control

指令

也就是Cache-Control后面的字段

  • max-age

    设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒)。时间是相对于请求的时间。

  • public

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

  • private

    表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)。私有缓存可以缓存响应内容,比如:对应用户的本地浏览器。

  • no-cache

    并不是真的不缓存数据,而是每次都确认资源是否过期,利用ETag令牌一定程度上减少传输流量

  • no-store

    即不使用任何缓存。

  • only-if-cached

    表明客户端只接受已缓存的响应,并且不要向原始服务器检查是否有更新的拷贝。

Etag

缓存未更改的资源

ETag头的一个典型用例是缓存未更改的资源。 如果用户再次访问给定的URL(设有ETag字段),显示资源过期了且不可用,客户端就发送值为ETagIf-None-Match header字段:

If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"

服务器将客户端的ETag(作为If-None-Match字段的值一起发送)与其当前版本的资源的ETag进行比较,如果两个值匹配(即资源未更改),服务器将返回不带任何内容的304 Not Modified,告诉客户端缓存版本可用。

HTTP缓存流程

在这里插入图片描述

参考资料

MDN web docs

揭秘网络框架第三篇: OkHttp 核心机制深入学习(彻底理解五个拦截器)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值