Кеширование ответов в HttpUrl по подключению андроида

В моем приложении я реализовал HttpResponseCache для кэширования ответов, чтобы его можно было использовать вместо попадания на сервер. Для конкретного API сервер возвращает заголовок Cache-Control как no-cache; must-revalidate. Он также имеет заголовок ETag. Проблема в том, что ответ этого API не кэшируется. В результате каждый раз, когда я запрашиваю API, сервер возвращает 200. Означает ли отсутствие кэширования, необходимость повторной проверки, что ответ не будет / не должен кэшироваться?

Ниже приведены заголовки запроса и ответа http-запроса:

Заголовки запроса:

GET HTTP / 1.1 User-Agent Принять приложение /json Cache-Control max-age=0 Cookie
хозяин
Connect-Alive Accept-Encoding gzip

Заголовки ответа:

HTTP / 1.1 200 OK Сервер Apache-Coyote/1.1 Cache-Control без кэширования, необходимо повторно подтвердить ETag "c683a0301c68c566fcc706f5cd82f1f8" Приложение с типом контента /json;charset=UTF-8 Кодировка передачи с разбивкой по фрагментам Кодирование содержимого gzip Vary Accept-Encoding Пн, 24 Фев 2014 04:44:03 GMT

Отправка HTTP_GET-запроса:

URL url = new URL(this.url);
HttpURLConnection conn = null;
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(timeout);
conn.setConnectTimeout(timeout);
conn.setInstanceFollowRedirects(true);
conn.setRequestProperty("User-Agent", this.userAgent);
conn.setUseCaches(true);
conn.setDefaultUseCaches(true);
conn.connect();
this.responseCode = conn.getResponseCode();
this.extractResponseHeaders(conn.getHeaderFields());
InputStream inputStream = null;
if (this.responseCode >= 400 ) {
    inputStream = conn.getErrorStream();
} else {
    inputStream = conn.getInputStream();
}
try {
    if(null != inputStream){
        this.response   =  convertToString(inputStream);
    }
} catch (JSONException e) {
    e.printStackTrace();
}

0 ответов

Другие вопросы по тегам