在HttpUrlConnection中缓存响应的android

时间:2014-02-21 14:18:42

标签: android caching httpurlconnection httpresponsecache

在我的应用程序中,我已经实现了HttpResponseCache来缓存响应,以便可以使用它而不是命中服务器。对于特定的api,服务器将标头Cache-Control作为no-cache返回;必须重新验证。它还有标题ETag。问题是这个api的响应没有被缓存。因此,每次我请求api时,服务器返回200。 no-cache,must-revalidate是否意味着响应不会/不应该被缓存?

请在下面找到http请求的请求和响应标头:

请求标题:

获取HTTP / 1.1 用户代理 接受application / json Cache-Control max-age = 0 饼干
主机
连接保持活跃 Accept-Encoding gzip

响应标题:

HTTP / 1.1 200好的 服务器Apache-Coyote / 1.1 Cache-Control no-cache,必须重新验证 ETag“c683a0301c68c566fcc706f5cd82f1f8” Content-Type application / json; charset = UTF-8 Transfer-Encoding chunked 内容编码gzip 改变接受编码 日期星期一,2014年2月24日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 个答案:

没有答案