我有一个简单的用例,其中服务器为请求返回 Etag ,并将该etag作为标头(即If-None-Match
)添加到所有后续的url请求中。如果响应中有更改,则服务器可以使用200
进行响应,否则可以使用304
进行响应。对于后者,重用来自缓存的响应是有意义的。但是okhttp始终返回null
作为缓存的响应。
我进行了一些故障排除,并且响应由okhttp内部写入磁盘,但是CachingStrategy
并没有将其返回到CacheInterceptor
。仔细研究CachingStrategy
类,有documentation specifically声明将不使用缓存:
/**
* Returns true if the request contains conditions that save the server from sending a response
* that the client has locally. When a request is enqueued with its own conditions, the built-in
* response cache won't be used.
*/
private fun hasConditions(request: Request): Boolean =
request.header("If-Modified-Since") != null || request.header("If-None-Match") != null
}
是否有解决此问题的方法,而改用缓存的响应?
(我已按照here所述启用缓存,并且我使用的是okhttp版本3.10.0
)
此外,奇怪的是,我不得不手动添加Etag。 Okhttp无法自行将etag添加到后续请求中。
编辑-更正后,Okhttp正确添加了etag标头。我需要使用网络拦截器而非常规拦截器,以查看etag标头被添加到后续请求中
与这些问题有关的一些事情
答案 0 :(得分:1)
您可以自己进行缓存,也可以让OkHttp的缓存进行缓存。添加自己的条件时,OkHttp假定您要完全控制缓存,并且不参与。