【问题标题】:How to set no cache AT ALL on AWS S3?如何在 AWS S3 上完全不设置缓存?
【发布时间】:2020-07-02 18:52:02
【问题描述】:

我开始使用 AWS S3 为我的用户提供一种快速下载我的 Win32 应用程序安装文件的方法。每个安装文件大约有 60MB,下载速度非常快。

但是,当我上传新版本的应用程序时,S3 会继续提供旧文件!我只是重命名旧文件并上传与旧文件同名的新版本。上传后,当我尝试下载时,会下载旧版本。

我搜索了一些解决方案,这是我尝试过的:

  • 将 cloudfrond 上的所有 TTL 值编辑为 0
  • 为存储桶上的每个文件使用值“max-age=0”编辑了元数据“Cache-control”

这些都没有解决问题,AWS 继续提供旧文件而不是新文件!

我经常会上传新版本,所以我需要当用户尝试下载时,S3 从不使用缓存。

请帮忙。

【问题讨论】:

  • S3 不缓存,CloudFront 有,用户的浏览器有。
  • 在 devtools 上,我将浏览器设置为不使用缓存。所以,如果是有罪的人在云端,我应该怎么做才能真正解决这个问题?
  • 在设置正确的缓存控制元数据后清除所有云端缓存。从长远来看,设计您的系统以使用版本化资产

标签: amazon-web-services amazon-s3 amazon-cloudfront


【解决方案1】:

我认为这种行为可能是因为 S3 使用了最终一致的模型,这意味着更新和删除最终会传播,但不能保证这会立即发生,甚至在特定的时间内发生。 (请参阅here 了解其一致性方法的细节)。具体来说,他们说“Amazon S3 为所有区域中的覆盖 PUTS 和 DELETES 提供最终一致性”,我认为您所描述的情况将是覆盖 PUT。这里似乎对类似问题有一个很好的答案:How long does it take for AWS S3 to save and load an item? 它涉及一致性问题以及如何解决它,希望这会有所帮助

【讨论】:

  • 据我了解,如果我需要新文件一上传就提供服务,我不能使用 S3?
  • 我发布的另一个 SO 链接提供了一些替代方案,但我认为您可能想要探索的一个是切换到仅 PUTS 而不覆盖旧数据(例如非覆盖 PUTS)。这可能/可能意味着您必须更改下载客户端,但它可以让您避免一致性问题
  • 我认为最好的方法是在上传新版本时,将版本包含在文件名中,这样每个新版本都会有不同的文件名。这是额外的工作,但是...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-07
  • 2018-06-19
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多