OkHttp3之缓存应用

本文深入探讨了OkHttp3如何控制HTTP缓存,包括Cache-Control的使用,强制从网络或缓存获取资源的方法,以及no-cache、no-store和max-age=0的辨析。通过实例展示了OkHttp3缓存的配置和使用,帮助理解客户端缓存机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、概论

在上一篇文章里面,我们详细的剖析了HTTP协议的缓存机制。但那主要是从服务器端进行分析的,这有助于我们理解HTTP的缓存机制,并为我们用好OkHttp3这一客户端的封装库提供更为清晰的思路。知其原理,才能事半功倍。如果对于HTTP协议的缓存机制还不是很不清楚,可以去看下上一篇博客HTTP协议进阶之缓存

本篇文章主要从客户端的缓存控制出发,探讨如何利用OkHttp3是如何对缓存进行控制的。

2、请求报文的Cache-Control

在写代码之前,我们先通过下表大概回顾一下HTTP请求报文中与缓存相关的首部字段Cache-Control中的值都有哪些,它们的作用分别都是什么,它们的详细解释在上一篇博客HTTP协议进阶之缓存中:

指令 目的
max-stale=s 在s时间段内,文档不会过期。该指令放松了缓存的规则
min-fresh=s 至少在未来的s秒内文档要保持新鲜。这使缓存规则更加严格了
max-age=s 缓存无法返回缓存时间长于s秒的文档。这条指令会使规则更加严格,除非同时还发送了max-stale指令,在这种情况下,使用期可能会超过其过期时间。
no-cache 除非资源进行了再验证,否则这个客户端不会接受已缓存的资源
no-store 缓存应该尽快从存储器中删除文档的所有痕迹,因为其中可能会包含敏感信息
only-if-cached 只有当缓存中有副本存在时,客户端才会获取一份副本

注:参见《HTTP权威指南》第194页,表中没有包括兼容性的Progma: no-cache

3、OkHttp3缓存简单使用

OkHttp3中关于缓存的类,我们使用的最多的是:Cache类和ControlCache类,其中前者用于指定缓存的地址和大小,后者用于对缓存进行各种控制,ControlCache又有其构建者类Builder。

先利用Cache类定义缓存地址和缓存最大尺寸:

long maxCacheSize = 100 * 1024 * 1024;
Cache cache = new Cache(
        new File("E:/Soft_Develop/iMooc/NetworkFrameDesign/Test"),
        maxCacheSize);

然后将其注入到OkHttpClient实例中:

OkHttpClient client = new OkHttpClient.Builder().cache(cache).build();

接着,构建我们的请求报文Request,我们使用凤凰网首页的网址,因为凤凰网首页的服务器支持缓存:

Request request = new Request.Builder()
                .url("http://www.ifeng.com")
                .build();

为了验证缓存是有效的,我们进行两次拉取,分别使用Response类的networkResponse()方法和cacheResponse()方法来查看从网络或缓存中读取到的内容情况:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值