Android:仅在更改时下载文件

标签 android http

我想编写一个需要来自网络的数据的 android 应用程序。此信息存储在 json 文件中。来自 json 文件的数据保存在设备上。为了使其保持最新,我需要每小时检查一次文件中的更改。

由于远程文件可能会变得非常大,所以只有当它与之前下载的版本不同时我才想下载它。为此,我考虑使用 HTTP 的 Last-Modified-Header。

我提出了以下工作流程(伪代码):

  • data = null; data_timestamp = null;
  • 每小时重复:
    • Last-Modified header 中的 URL 和选项 new_timestamp 发出 HTTP header 请求。
    • 如果 data==nullnew_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/

相关文章:

javascript - 如何创建可从多个应用程序使用的 PHP 登录 Web 服务?

ios - 如何在 Swift 中从 WKWebView 获取 POST 请求正文?

android - 以编程方式更改芯片小部件样式不起作用 - Android

javascript - React Native - 启动画面更改错误

java - VideoView无法播放视频

php - 使用 goutte 进行同步 HTTP 请求

android - viewpager fragment 中出现 stackoverflow 错误

android - 按钮中的自定义 TextView

java - 写入操作时 Solrj 身份验证失败

http - 如何将在不同端口上运行的多个Docker Web服务器容器链接到不同的URL路径?