You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询OKHttp 301重定向条目的存储位置及清除方法

关于OKHttp 301重定向缓存的位置与清除方法

嘿,我来帮你理清OKHttp处理301永久重定向的逻辑,解决你的困惑:

  • 301重定向的缓存位置:
    当你没有为OkHttpClient配置磁盘缓存(也就是没调用newBuilder().cache(new Cache(...)))时,OKHttp会把301的永久重定向条目存在内存缓存里,而且这个缓存是和你的OkHttpClient实例绑定的——它不会写入App的/data/data/<包名>/cache目录,也不会存储在系统级缓存中。这就是你在磁盘上找不到相关文件的原因。

    这个内存缓存的生命周期和OkHttpClient实例一致,只要实例还在内存中,重定向记录就会保留;一旦实例被GC回收,缓存也会随之消失。

  • 如何清除这个301缓存:

    1. 最直接的方式:重建OkHttpClient实例
      如果你可以重新创建OkHttpClient对象,直接new一个新的实例即可。旧实例被回收后,内存里的301重定向缓存就会被清除。
    2. 针对单个请求跳过缓存
      如果你不想重建客户端,可以在发起请求时设置CacheControl.FORCE_NETWORK,强制OKHttp忽略所有缓存(包括内存中的301重定向),直接请求原地址:
      Request request = new Request.Builder()
          .url("你的原请求URL")
          .cacheControl(CacheControl.FORCE_NETWORK)
          .build();
      
    3. 禁止自动跟随重定向(临时排查用)
      你也可以创建一个临时的OkHttpClient实例,关闭自动重定向,手动处理请求:
      OkHttpClient tempClient = originalClient.newBuilder()
          .followRedirects(false)
          .build();
      

需要注意的是:OKHttp的内部内存缓存没有暴露直接清除的API,所以重建实例或者针对请求设置强制网络是最可靠的方案。

内容的提问来源于stack exchange,提问作者Andrew Kurniadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:30:13