我有一个针对ICS及以上的应用程序,我正试图使用HttpsURLConnection和HttpResponseCache来缓存web服务响应。它使用etag发出请求,如果不修改,服务器将返回304。它似乎是从缓存返回的东西,但是,我没有收到任何迹象表明,响应是从缓存。我从connection.getResponseCode()
得到的响应代码是200,不是304。我需要知道它是否被缓存,因为我想知道它是否被更改,这样我就可以将其标记为已读(这是一个相当长的字符串,我不想比较这两个字符串)。是否有我可以设置或检查的东西,这样我就知道它是从缓存而不是新获取的?
您可以尝试使用响应头信息。比较日期,如果你得到相同的请求相同的日期,那么它是缓存。
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() + "");
}
在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""
它应该有我没有测试过的其他状态消息