【发布时间】:2011-03-22 18:08:46
【问题描述】:
我想编写一个需要来自网络的数据的 android 应用程序。此信息存储在 json 文件中。 json 文件中的数据保存在设备上。为了使其保持最新状态,我需要每小时检查一次文件中的更改。
由于远程文件可能会变得非常大,我只想在它与之前下载的版本不同时才下载它。我考虑过为此使用 HTTP 的 Last-Modified-Header。
我想出了以下工作流程(伪代码):
data = null; data_timestamp = null;- 每小时重复一次:
- 从
Last-ModifiedHeader 向URL 和选项new_timestamp发出HTTP Head-Request。 - 如果是
data==null或new_timestamp > data_timestamp,那么- 向 URL 发出正常的 HTTP 请求
- 保存到
data并设置data_timestamp = new_timestamp
- 从
您认为这是一个合理的方法吗?我可以使用if-modified-since HTTP 标头来获取数据,前提是它自上次下载以来发生了变化。这将为我节省一个请求。如果已更改,则提供包含新数据的正文,如果未更改,则正文为空。
我还考虑过使用 ETags,因为如果文件有新内容(而不是修改日期已更改),我通常想下载,但我的网络服务器 (nginx) 不支持创建 etags,我出于性能原因,不想在服务器端涉及另一层。
【问题讨论】: