Кеширование ответов в 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();
}