如何更改 Okhttp 中的默认缓存策略?

Posted

技术标签:

【中文标题】如何更改 Okhttp 中的默认缓存策略?【英文标题】:How to change default cache policy in Okhttp? 【发布时间】:2020-05-06 13:21:26 【问题描述】:

我正在使用 Picasso 进行图像加载。毕加索没有磁盘缓存。 OkHttp 维护一个由 HTTP 缓存头控制的 HTTP 缓存。我想为磁盘缓存图像设置过期时间,因此在 HTTP 响应 cache-control: public, max-age=7200 中添加了缓存控制标头,但它不尊重缓存标头。当前行为是遵循 RFC 7234 的默认 HTTPResponseCache。 我们有什么遗漏吗?

【问题讨论】:

【参考方案1】:

您可以使用网络拦截器重写响应中的缓存标头。以下是来自OkHttp interceptors doc 的示例,可帮助您入门:

/** Dangerous interceptor that rewrites the server's cache-control header. */
private static final Interceptor REWRITE_CACHE_CONTROL_INTERCEPTOR = new Interceptor() 
  @Override public Response intercept(Interceptor.Chain chain) throws IOException 
    Response originalResponse = chain.proceed(chain.request());
    return originalResponse.newBuilder()
        .header("Cache-Control", "max-age=60")
        .build();
  
;

请注意,您可能需要从服务器响应中删除标头以获得所需的缓存行为。

另请注意,最好修复服务器以执行您想要的操作;这样它就可以在 ios 和网络上正常工作。

【讨论】:

我们尝试从客户端设置标头,但仍然不尊重 Cache-Control 标头。有什么方法可以告诉 okhttp 缓存这么多小时?

以上是关于如何更改 Okhttp 中的默认缓存策略?的主要内容,如果未能解决你的问题,请参考以下文章

设置默认缓存策略 apollo swift

如何更改操作系统文件缓存刷新策略?

REDIS16_LRU算法概述查看默认内存默认是如何删除数据缓存淘汰策略

什么是Redis缓存淘汰策略?现在就带你研究

Retrofit 源码解读之离线缓存策略的实现

NSURLRequestCachePolicy 缓存策略