如何在亚马逊云端设置缓存控制标头?
Posted
技术标签:
【中文标题】如何在亚马逊云端设置缓存控制标头?【英文标题】:How to set Cache-Control Header in amazon cloudfront? 【发布时间】:2019-10-04 20:49:02 【问题描述】:我有一个亚马逊云端发行版,可以为我的 CDN 创建一个“来源”。在我的行为中,我设置了 Max TTL、Min TTL 和默认 TTL。但是我的响应标头不会返回重定向的静态文件中的 Cache-control 标头。如何设置缓存控制?我需要这个来获取谷歌页面洞察
Files to create cache-control
My header responses
【问题讨论】:
你能找到解决办法吗? 【参考方案1】:您可以在不使用函数的情况下向 CloudFront 实例添加 Cache-Control 标头。
转到 AWS 控制台并导航到 CloudFront 实例 转到策略 -> 响应标头,然后单击自定义策略下的“创建响应标头策略”。如果您有现有的政策,请对其进行编辑。 在自定义标题下的下一个屏幕中,添加Cache-Control
标题以及您想要的最大年龄值。如果需要,可以将此值设置为覆盖原点。
现在转到您的分发并导航到“行为”选项卡。
在您的默认行为中,在响应标头策略下选择您刚刚创建的那个。
您的所有响应现在都将包含您设置的缓存标头。
【讨论】:
请注意,这是最近的功能,仅在November 2021 中发布。不过,它绝对解决了最初的问题,而且绝对是现在最好的解决方案!【参考方案2】:正如 James 所述,您在创建分配时在 CF 设置中看到的 MAX TTL、MIN TTL 等定义了 CloudFront 分配和 Origin 的缓存行为。换句话说,CloudFront 在检查源之前应将资产保留在边缘站点中的时间。 例如,如果您有一个 S3 存储桶作为源,然后是 CloudFront 分配,则通过设置 MAX TTL Min TTL 等,您可以告诉 CloudFront 它应该多久检查一次源(在本例中为 S3)是否有更改。 您可以在 AWS Docs 中了解有关它的更多信息。 Managing How Long Content Stays in an Edge Cache (Expiration).
在上面的示例中,您可以转到 S3 存储桶并设置 Cache-Control
。有关如何操作的更多信息,请阅读此one。
【讨论】:
通过second link 中的说明在 S3 存储桶上设置 Cache-Control 是正确的解决方案。您不能在 CloudFront 的源上设置 Cache-Control;这是not allowed by CloudFront right now。 OP(和我)只是想通过 Lighthouse 测试,唯一的方法是在存储桶的项目上设置 Cache-Control。 S3 设置头文件的接口比较笨重,更换文件需要重新设置头文件。如果你的静态文件是通过脚本自动生成的,这对你来说可能没问题,但在我们的例子中,我们设置了一个 lambda 来为某些静态资产文件返回缓存控制头给浏览器【参考方案3】:您可以: 1. 配置 origin 以在响应中添加 Cache-Control 标头。 要么 2. 使用 Lambda@edge(查看器响应,因为您只想将其用于谷歌页面洞察)在响应中添加 Cache-control 标头。 例子: https://github.com/jkrnak/serverless-lambda-at-edge/blob/master/handler.js
定义 TTL 不会添加任何缓存控制头,它用于考虑需要缓存多长时间。
【讨论】:
以上是关于如何在亚马逊云端设置缓存控制标头?的主要内容,如果未能解决你的问题,请参考以下文章
EMQ 走进亚马逊云科技:携手云端,共筑「面向未来」的 IoT 基础设施底座
EMQ 走进亚马逊云科技:携手云端,共筑「面向未来」的 IoT 基础设施底座
PingCAP x 亚马逊云科技,为 TiDB 云端体验“加冕”