Cache Control игнорируется

В настоящее время я работаю с Retrofit и Okhttp и пытаюсь кэшировать некоторые ответы GET. Мой код:

OkHttpClient okHttpClient = new OkHttpClient();
    File cacheDir = new File(System.getProperty("java.io.tmpdir"),
            "ddcache");
    HttpResponseCache cache = new HttpResponseCache(cacheDir, 2024);
    okHttpClient.setResponseCache(cache);
    OkClient cl=new OkClient(okHttpClient);
    restAdapter = new RestAdapter.Builder().setEndpoint(API_URL)
            .setLogLevel(RestAdapter.LogLevel.FULL)
            .setClient(cl).build();

И журнал показывает этот заголовок:

HTTP/1.1 200 OK
Cache-Control: max-age=7200
Connection: Keep-Alive
Content-Type: text/html
Date: Tue, 18 Mar 2014 18:38:16 GMT
Keep-Alive: timeout=3, max=100
OkHttp-Received-Millis: 1395167895452
OkHttp-Response-Source: NETWORK 200
OkHttp-Sent-Millis: 1395167895378
Server: Apache/2.2.26 (Unix)
Transfer-Encoding: chunked
X-Powered-By: PHP/5.3.28

Я проверяю ответ, возвращая Unix-время сервера при каждом вызове, и он всегда возвращает новый, что означает

Кэш-контроль: max-age=7200

полностью игнорируется. Файл журнала в кэше также обновляется заметками «ЧИСТЫЕ» и «ГРЯЗНЫЕ», но ничего не кэшируется. Есть что-то очевидное, чего я не вижу?


person LeDon    schedule 18.03.2014    source источник
comment
Как выглядит ваш запрос? Я не смог воспроизвести проблему в тесте. gist.github.com/swankjesse/a2fba4b1277b4cf4c973   -  person Jesse Wilson    schedule 19.03.2014
comment
Хорошо, я попробовал ваш пример, и он что-то кэшировал в данной папке. Может быть, это что-то с серверным временем или чем-то еще. Если я загляну в файл журнала, он будет записан, но мгновенно удален.   -  person LeDon    schedule 20.03.2014
comment
Ах, я предполагаю, что вы не читаете полное тело ответа HTTP, что приводит к прерыванию ответа кеша. Вы используете OkHttp 1.5.2? Это может исправить.   -  person Jesse Wilson    schedule 25.03.2014
comment
Ага. Я использую OkHttp 1.5.2 вместе с новейшим RetroFit. Так что я думаю, я прочитал полный запрос. Как предложено здесь Я добавляю в свой запрос заголовок max-stale, но запросы все равно не кэшируются.   -  person LeDon    schedule 01.04.2014


Ответы (1)


Я думаю, что у меня была похожая проблема. Размер кеша задается в килобайтах, и вы устанавливаете его только на 2024 килобайта. Что не хватает места почти ни для чего. Попробуйте установить его на «10L * 1024 * 1024» (10 МБ) и посмотрите, поможет ли это.

person zivke85    schedule 22.05.2014
comment
У вас есть хорошая точка там. Попробую позже и отчитаюсь. В настоящее время я использую какой-то нестандартный хакерский подход, с которым я не чувствую себя комфортно. - person LeDon; 22.05.2014