BoD*_*BoD 9 android http-caching retrofit2 okhttp3
我正在使用Retrofit,配置为使用带缓存的OkHttp.我称之为api:https://api.github.com/users/bod/repos,它返回一个Etag和一个Cache-Control: public, max-age=60, s-maxage=60标题.
我在不到60秒的时间内发出两个请求,所以我希望第二个请求根本不执行任何网络并根据Cache-Control指令使用缓存.但那不是我所看到的.
我猜这是因为该Etag指令优先?
这是正确/正常/预期的行为吗?
RFC2068 超文本传输协议 - HTTP/1.1于 1997 年发布,详细介绍了ETag和Cache-Control标头。后来的文档RFC2616和RFC7232都扩展了ETag标头以及它如何与If-None-Match.
RFC2616,13.3 验证模型包含您问题的答案:
当缓存有一个陈旧条目想要用作对客户端请求的响应时,它首先必须检查原始服务器(或者可能是具有新响应的中间缓存),以查看其缓存条目是否仍然可用。我们称之为“验证”缓存条目。
然后,它继续列出验证模型,包括实体标记 (ETag) 缓存验证器以及上次修改日期。过时的高速缓存条目是maxage该资源已发生该或其他到期机制的条目。
所以你的系统的行为是意想不到的。可能值得测试带有和不带有 ETag 标头的内容,以验证本地缓存是否正常工作。
| 归档时间: |
|
| 查看次数: |
662 次 |
| 最近记录: |