我想编写一个需要来自网络的数据的 android 应用程序。此信息存储在 json 文件中。来自 json 文件的数据保存在设备上。为了使其保持最新,我需要每小时检查一次文件中的更改。
由于远程文件可能会变得非常大,所以只有当它与之前下载的版本不同时我才想下载它。为此,我考虑使用 HTTP 的 Last-Modified-Header。
我提出了以下工作流程(伪代码):
data = null; data_timestamp = null;
- 每小时重复:
- 向
Last-Modified
header 中的 URL 和选项new_timestamp
发出 HTTP header 请求。 - 如果
data==null
或new_timestamp > data_timestamp
则- 向 URL 发出一个普通的 HTTP 请求
- 保存到
data
并设置data_timestamp = new_timestamp
- 向
您认为这是一种合理的做法吗?我可以使用 if-modified-since
HTTP header 来获取自上次下载以来发生变化的数据。这将为我节省一个请求。如果它已更改,则提供包含新数据的正文,如果没有,则正文为空。
我也考虑过使用 ETag,因为如果文件有新内容(而不是如果修改日期已更改),我通常想下载,但我的网络服务器 (nginx) 不支持创建 etag,我出于性能原因,不想在服务器端涉及另一层。
最佳答案
您应该考虑使用 ETags而不是依赖 HTTP HEAD
。他们是supported in javax.ws.rs.core
with the EntityTag
class .
你可以看到一个Java-based example using Spring也有助于解释一些概念。
关于Android:仅在更改时下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5395827/