如何在 AWS S3 上完全不设置缓存?

Posted

技术标签:

【中文标题】如何在 AWS S3 上完全不设置缓存?【英文标题】:How to set no cache AT ALL on 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 上,我将浏览器设置为不使用缓存。所以,如果是有罪的人在云端,我应该怎么做才能真正解决这个问题? 在设置正确的缓存控制元数据后清除所有云端缓存。从长远来看,设计您的系统以使用版本化资产 【参考方案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)。这可能/可能意味着您必须更改下载客户端,但它可以让您避免一致性问题 我认为最好的方法是在上传新版本时,将版本包含在文件名中,这样每个新版本都会有不同的文件名。这是额外的工作,但是...

以上是关于如何在 AWS S3 上完全不设置缓存?的主要内容,如果未能解决你的问题,请参考以下文章

使用 AWS CLI 上传到 S3 时如何设置 Content-Type?

AWS S3 CLI - 如何使用存储桶上设置的所有当前策略获取 JSON?

如何使用 CORS 限制 AWS S3 访问?

我如何通过AWS SNS设置有关上传事件的AWS S3?

AWS DMS - 如何将 RDS 表数据写入单个 S3 目标文件?

将文件从 GCS 复制到 AWS S3 时如何设置 acl?