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

问题描述 投票:3回答:2

我有一个针对ICS及以上的应用,我想用HttpsURLConnection和HttpResponseCache来缓存一个web服务的响应。它用etag进行请求,如果没有修改,服务器会返回304。它看起来是从缓存中返回的东西,然而,我没有收到任何响应来自缓存的指示。我收到的响应代码是 connection.getResponseCode() 是200,而不是304.我需要知道它是否被缓存了,因为我想知道它是否有变化,这样我就可以把它标记为已读(它是一个相当长的字符串,我不希望比较两者)。我需要知道它是否被缓存了,因为我想知道它是否被改变了,这样我就可以把它标记为已读(这是一个相当长的字符串,我不想比较两者)。有没有什么东西我可以设置或检查,这样我就知道它是从缓存中获取的,而不是新获取的?

android caching httpurlconnection httpresponsecache
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() + "");
}

1
投票

在安卓9系统上打印整个响应头后 我发现以下字段很有用。

HttpURLConnection conn;

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

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

它应该还有其他状态信息,我没有测试过。

© www.soinside.com 2019 - 2024. All rights reserved.