Как использовать ETag OkHttp и If-None-Match на Android

Я использую OkHttpClient (v3.0.1), который есть в моем приложении, но ETag и If-None-Match не работают。

Например:

Сначала ПОЛУЧИТЕ http://112.4.19.67/task/imags_avatar/20130607165126605.png

В ответ я получаю ETag и Last-Modified.

Запрос:

GET /task/imags_avatar/20130607165126605.png HTTP/1.1
Host: 112.4.19.67
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.0.1

Ответ:

HTTP/1.1 200 OK
Server: Apache
Last-Modified: Mon, 30 Jun 2014 04:44:43 GMT
ETag: "1205-4fd06515d9572"
Content-Type: image/png
Content-Length: 4613
Accept-Ranges: bytes
Date: Thu, 04 Feb 2016 13:30:05 GMT
X-Varnish: 3684240013 3683622711
Age: 1313
Via: 1.1 varnish
Connection: keep-alive

Второй ПОЛУЧИТЕ тот же URL: http://112.4.19.67/task/imags_avatar/20130607165126605.png

Я думаю, что мог видеть If-None-Match в запросе. но его не существует.

Запрос:

GET /task/imags_avatar/20130607165126605.png HTTP/1.1
Host: 112.4.19.67
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.0.1

Ответ:

HTTP/1.1 200 OK
Server: Apache
Last-Modified: Mon, 30 Jun 2014 04:44:43 GMT
ETag: "1205-4fd06515504c0"
Content-Type: image/png
Content-Length: 4613
Accept-Ranges: bytes
Date: Thu, 04 Feb 2016 13:30:26 GMT
X-Varnish: 3389168698 3388862573
Age: 642
Via: 1.1 varnish
Connection: keep-alive

Мой код

    File file = getCacheDir();
    Cache cache = new Cache(file, CACHE_SIZE);

    OkHttpClient.Builder builder = new OkHttpClient.Builder();
    builder.cache(cache);
    OkHttpClient client = builder.build();

    Request request = new Request.Builder()
            .url(url)
            .build();

Заранее благодарю за любую помощь.


person user5886883    schedule 05.02.2016    source источник
comment
Ваш код выглядит нормально. Попробуйте перехватить запрос с настройками прокси-сервера с помощью программного обеспечения, такого как mitmproxy или charlesproxy, потому что модифицированный logcat не печатает заголовок if-none-match, хотя okhttp уже добавляет заголовок. Другое дело, что модификация печатает код состояния 304 как 200.   -  person baskara    schedule 29.08.2016


Ответы (1)


Вы читаете полный текст ответа с первого запроса? OkHttp не записывает ответ в кеш, пока вы не закончите чтение тела.

person Jesse Wilson    schedule 05.02.2016