ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

第261篇 HTTP 缓存与 OkHttp 缓存策略

第261篇 HTTP 缓存与 OkHttp 缓存策略

先把结论放在前面:HTTP 缓存的核心不是"存下来",而是"在什么条件下用缓存、用多久、以及怎么知道缓存过期了"。Android 与 OkHttp 的默认行为是遵守服务端的缓存头——Cache-Control与ETag决定了缓存能不能用、什么时候重新验证。如果服务端不下发缓存头,客户端缓存策略再复杂也不会生效,这是排查"缓存没起作用"的第一检查点。

面试里这题属于"网络专题的关键一环"。答得浅的是"Cache-Control: max-age设置缓存时间";答得深的是能讲清强缓存与协商缓存的完整判定流程、ETag与Last-Modified的优先级、304与200的区别、OkHttp 磁盘缓存的容量淘汰策略、以及"强制缓存 + 网络失败兜底"这类离线能力的实现。

两种缓存的判定流程

这是本题的骨架,必须能完整讲出来。

/** 缓存判定的完整流程(客户端侧视角) */ class CacheDecision { data class Request(val url: String, val method: String, val maxAgeSeconds: Long?, val maxStaleSeconds: Long?, val etag: Strin
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进