存储桶文件更改后,如何清除静态 Cloud Storage 网站上的缓存?
Posted
技术标签:
【中文标题】存储桶文件更改后,如何清除静态 Cloud Storage 网站上的缓存?【英文标题】:How can I clear the cache on a static Cloud Storage website after bucket file changes? 【发布时间】:2020-08-19 19:34:37 【问题描述】:我有一个通过 Google Cloud 提供服务的静态网站。这是通过将静态文件存储在可公开访问的存储桶中并将该存储桶用作 HTTPS 负载均衡器的后端来完成的。 (未选择负载均衡器的 CDN 选项。)
网站加载正常,但我的问题是,当我更新存储桶内容时,这些更改需要花费不可预测的时间才能反映在浏览器中。我正在明确刷新,我也在尝试在 Chrome 控制台打开时尝试在“网络”选项卡中选择“禁用缓存”。
我已通过导航到相关 javascript 文件的 Cloud Storage 中的“对象详细信息”页面并访问提供的“链接 URL”来确保存储桶代码实际上已更新。我为我的更改而grep它,我看到了它们。然后我访问我的网站,查看源代码,在新选项卡中打开链接的 js 文件,用 grep 查找我的更改,但看不到它们。所以它们在存储桶中,但被缓存在某个地方。
我不确定我遇到的缓存是发生在浏览器中还是发生在 Google Cloud 的某个层中。但是我怎样才能做到当我更改存储桶内容时,我可以立即在浏览器中看到这些更改?如何确保在每次存储桶更新后清除缓存(无论发生在何处)?
【问题讨论】:
【参考方案1】:这里是the documentation的摘录:
还要注意,由于对象可以缓存在 Internet 上的不同位置,因此无法强制缓存对象全局过期(与强制浏览器刷新缓存的方式不同)。如果您想阻止提供公开可读对象的缓存版本,请在对象上设置“Cache-Control:no-cache, max-age=0”。
因此,如果您不希望在更新存储桶时出现任何延迟,我建议您将文件的缓存 max-age 设置为 0。然而,这是在低服务延迟/低成本(更少的存储读取,更少的出口支付)和低更新延迟之间的权衡。
一切都取决于您的用例!
【讨论】:
以上是关于存储桶文件更改后,如何清除静态 Cloud Storage 网站上的缓存?的主要内容,如果未能解决你的问题,请参考以下文章
如何更改 Google Compute Engine 服务帐户的范围以将数据写入 Google Cloud Storage 存储桶?
如何从 Cloud Storage 存储桶提供 App Engine 网站的 /static/ 目录内容?
可以获得 Google Cloud Functions 的静态 IP 地址吗?
如何在使用 gsutil 保留 ACL 的同时将文件从 Google Cloud Storage 存储桶 1 复制到存储桶 2