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

标签 android caching httpurlconnection httpresponsecache

我有一个针对 ICS 及更高版本的应用程序,我正在尝试使用 HttpsURLConnection 和 HttpResponseCache 来缓存网络服务响应。它使用 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 HttpsURLConnection,如何判断响应是否被缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24248201/

相关文章:

Android 和用于电子邮件的 BroadcastReceiver

android - Android 上 <supports-screens> 和 <compatible-screens> 之间的区别

mongodb - MongoDB 的 Varnish ,有必要吗?

Android HttpUrlConnection getInputStream 抛出 NullPointerException

Java - 在同一连接上执行 http 请求 POST 和 GET

java在另一个类中编辑文本字段

android - CPU 可能被挂起,OpenGL 动态壁纸锁定

java - 将 EhCache 磁盘存储内容加载到内存中

node.js - 在 Node.js api 中提供 JSON 响应时防止缓存

java - 如何在 Java 中模拟 PHP cURL 请求?