Android HttpsURLConnection,如何判断响应是否被缓存?

时间:2014-06-16 16:25:44

标签: android caching httpurlconnection httpresponsecache

我有一个针对ICS及以上的应用,我尝试使用HttpsURLConnection和HttpResponseCache来缓存Web服务响应。它使用etag发出请求,如果没有修改,服务器将返回304。它似乎是从缓存中返回的东西,但是,我没有收到任何关于响应来自缓存的指示。我从connection.getResponseCode()获得的响应代码是200,而不是304.我需要知道它是否已缓存,因为我想知道它是否已更改,因此我可以将其标记为读(它是一个相当长的字符串,我不想比较两者)。有什么我可以设置或我可以检查的东西,所以我知道它是从缓存而不是新鲜的?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用响应标头信息。比较日期,如果您获得相同请求的相同日期,那么它就是缓存。

HttpURLConnection conn;
conn = (HttpURLConnection)url.openConnection();
...
conn.connect();

System.out.println(conn.getHeaderField("Date"));

如果你想打印整个标题:

Map headerfields = conn.getHeaderFields();
Set headers = headerfields.entrySet(); 
for(Iterator i = headers.iterator(); i.hasNext();){ 
    Map.Entry map = (Map.Entry)i.next();
    System.out.println(map.getKey() + " : " + map.getValue() + "");
}

答案 1 :(得分:1)

在Android 9上打印整个响应标题后,我发现以下字段很有用。

HttpURLConnection conn;

...
conn.getHeaderField("X-Android-Response-Source"); // "NETWORK 200" or "CACHE 200"

conn.getHeaderField("Warning"); // null or "110 HttpURLConnection "Response is stale""

它应该具有我尚未测试的其他状态消息。