我想编写一个需要来自网络数据的Android应用程序。此信息存储在json文件中。来自json文件的数据保存在设备上。为了使其保持最新,我需要每小时检查一次文件中的更改。
由于远程文件可能变得非常大,我只想在它与以前下载的版本不同时下载它。我考虑过使用Last-Modified-Header of HTTP。
我提出了以下工作流程(伪代码):
data = null; data_timestamp = null;
new_timestamp
标题向网址和选项Last-Modified
发出HTTP头请求。data==null
或new_timestamp > data_timestamp
那么
data
并设置data_timestamp = new_timestamp
你认为这是一种合理的方法吗?我可以使用if-modified-since
HTTP标头来获取自上次下载以来已更改的数据。这样可以节省一个请求。如果它已经改变,则提供包含新数据的主体,如果没有,则主体为空。
我还考虑过使用ETag,因为我通常想要下载文件是否有新内容(如果修改日期已经改变则没有),但是我的网络服务器(nginx)不支持创建etags和我出于性能原因,不希望在服务器端涉及另一层。
答案 0 :(得分:2)
您应该考虑使用ETags而不是依赖HTTP HEAD
。它们是supported in javax.ws.rs.core
with the EntityTag
class。
您可以看到Java-based example using Spring来帮助解释一些概念。
答案 1 :(得分:0)
我解决了上面描述的问题:使用if-modified-since
HTTP标头下载文件。 ngnix
网络服务器可以配置为返回有关此标头的正确信息。