okhttp学习系列之CacheInterceptor拦截器

Cache-Control字段

在正式介绍CacheInterceptor拦截器之前,我们有必要复习下Cache-Control字段。因为CacheInterceptor实际上是对Cache-Control字段的逻辑实现

常见的取值及含义是

no-store 彻底禁用缓存,所有内容都不会被缓存到缓存或临时文件中
no-cache 在浏览器使用缓存前,会往返对比ETag,如果ETag没变,返回304,则使用缓存

public

所有的内容都将被缓存

private 缓存仅客户端可以缓存,代理服务器不可缓存
max-age 缓存的内容将在xxx秒后失效,这个选项只有在http1.1可用,并如果和Last-Modified一起使用时,优先级较高

 

 

 

 

 

代码逻辑

完整的代码请参看https://gitee.com/you-zijun/okhttp/blob/c2fa722dfc3e2d5e823af404c3ed30f112418eac/okhttp/src/main/kotlin/okhttp3/internal/cache/CacheInterceptor.kt

代码分三部分

1. 进行cache和request的预处理

 

//首先应该留意到这个构造方法, 需要初始化一个Cache对象, 而Cache类是final类型的, 所有这个地方不需要自己实现Cache的逻辑
class CacheInterceptor(internal val cache: Cache?) : Interceptor {

  @Throws(IOException::class)
  override fun intercept(chain: Interceptor.Chain): Response {
    val call = chain.call()
    //从cache中获取当前的CacheResponse. 这个cacheCandidate实际上就是一个Response
    val cacheCandidate = cache?.get(chain.request())

    val now = System.currentTimeMillis()

    //上面从cache, 即使上是从DiskLruCache中读取了CacheResponse,但是这个CacheResponse不一定可用, 可能会受到Cache Control中的
    //过期等影响, 同样,原始的Request也不一定可用个, 需要利用CacheStrategy来综合判断处理过的request和cache response,也就是后面
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值