Я начинаю с кеширования и Retrofit/OKHttp3 в Android. Нам нужно поддерживать автономный режим/отключение сервера для нашего приложения, и я пытаюсь выяснить, как правильно настроить кеш для поддержки этого. Идея состоит в том, чтобы получить свежую копию с сервера, когда она будет доступна (или 304, если ничего не изменилось). Если сервер не работает или приложение отключено, нам нужно получить кешированный ответ.
Я настроил Cache-control следующим образом:
Cache-Control: no-transform, max-age=0, max-stale=50, private
Это работает очень хорошо, но я не понимаю, почему OKHttp обслуживает кешированный ответ, даже когда «max-stale» прошел? Я думал, что через 50 секунд я получу 504 - Неудовлетворительный запрос, потому что период максимального устаревания прошел?
Это перехватчик, который я использую для OKHttp:
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
try {
if (!NetworkUtil.isNetworkAvailable(model.getApplicationContext())) {
return getCachedResponse(chain);
}
Request request = chain.request();
return chain.proceed(request);
} catch (Exception exception) {
return getCachedResponse(chain);
}
}
})
private static Response getCachedResponse(Interceptor.Chain chain) throws IOException {
Request request = chain.request().newBuilder()
.cacheControl(CacheControl.FORCE_CACHE)
.removeHeader("Pragma")
.build();
Response forceCacheResponse = chain.proceed(request);
return forceCacheResponse.newBuilder()
.build();
}
Любые идеи, как настроить кеш, чтобы он не обслуживал кешированный ответ после того, как прошел период максимального устаревания?