我有一个针对 ICS 及更高版本的应用程序,我正在尝试使用 HttpsURLConnection 和 HttpResponseCache 来缓存 Web 服务响应。它使用 etag 发出请求,如果未修改,服务器将返回 304。它似乎正在从缓存中返回内容,但是,我没有收到任何表明响应来自缓存的迹象。我得到的响应代码connection.getResponseCode()
是 200,而不是 304。我需要知道它是否已缓存,因为我想知道它是否已更改,以便将其标记为已读(这是一个相当长的字符串,我不想比较两者)。有什么我可以设置或可以检查的东西,所以我知道它来自缓存而不是新获取的吗?
问问题
964 次
2 回答
3
您可以尝试使用响应头信息。比较日期,如果您为相同的请求获得相同的日期,那么它就是缓存。
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() + "");
}
于 2014-06-16T22:56:19.950 回答
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""
它应该有其他我没有测试过的状态消息。
于 2020-05-26T07:16:01.550 回答