在我的应用程序中,我实现了 HttpResponseCache 来缓存响应,以便可以使用它而不是访问服务器。对于特定的 api ,服务器将标头 Cache-Control 作为 no-cache;must-revalidate 返回。它也有标题 ETag。问题是这个 api 的响应没有被缓存。结果,每次我请求 api 时,服务器都会返回 200。 no-cache,must-revalidate 是否意味着响应不会/不应该被缓存?
请在下面找到 http 请求的请求和响应标头:
请求标头:
GET HTTP/1.1 User-Agent Accept application/json Cache-Control max-age=0 Cookie
Host
Connection Keep-Alive Accept-Encoding gzip
响应标头:
HTTP/1.1 200 OK 服务器 Apache-Coyote/1.1 Cache-Control no-cache, must-revalidate ETag "c683a0301c68c566fcc706f5cd82f1f8" Content-Type application/json;charset=UTF-8 Transfer-Encoding chunked Content-Encoding gzip Vary Accept-Encoding Date格林威治标准时间 2014 年 2 月 24 日星期一 04:44:03
发送 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();
}