如何在 amazon cloudfront 中设置 Cache-Control Header?

Igo*_*adi 7 header cache-control amazon-web-services amazon-cloudfront pagespeed-insights

我有一个 amazon cloudfront 发行版,它为我的 CDN 创建了一个“来源”。在我的行为中,我设置了最大 TTL、最小 TTL 和默认 TTL。但是我的响应头不会在重定向的静态文件中返回 Cache-control 头。如何设置缓存控制?我需要这个用于谷歌页面洞察

创建缓存控制的文件

我的标题响应

Kol*_*n N 41

您可以将 Cache-Control 标头添加到 CloudFront 实例,而无需使用函数。

  • 转到 AWS 控制台并导航到 CloudFront 实例
  • 转到策略 -> 响应标头,然后单击自定义策略下的“创建响应标头策略”。如果您有现有策略,请对其进行编辑。
  • 在下一个屏幕中的自定义标题下添加Cache-Control标题以及您想要的最大年龄值。如果需要,可以将该值设置为覆盖原点。
  • 现在转到您的“分布”并导航到“行为”选项卡。
  • 在您的默认行为中,在响应标头策略下选择您刚刚创建的标头。

在此输入图像描述

您的所有响应现在都将包含您设置的缓存标头。

  • 如果有人希望将缓存控制值(针对现有和未来的文件)设置为使用 S3 作为源的 CloudFront 发行版,那么肯定会希望启用 **Origin override** 选项。这是因为,据我所知,无法为 S3 存储桶设置默认缓存控制值。(您只能为单个文件设置它;如果未设置覆盖,则默认的、不可变的值 604800 将用于新文件或未设置自定义值的文件。) (7认同)
  • 请注意,这是一项最新功能,仅于 [2021 年 11 月](https://aws.amazon.com/blogs/networking-and-content-delivery/amazon-cloudfront-introduces-response-headers-policies/) 发布。不过,它绝对解决了原来的问题,而且绝对是现在最好的解决方案! (4认同)

小智 25

缓存控制

\n

您可以在不使用函数的情况下向 CloudFront 实例添加 Cache-Control 标头。\n https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/adding-response-headers.html

\n
    \n
  1. 转到 AWS 控制台并导航到 CloudFront 实例。
  2. \n
  3. 转到行为选项卡
  4. \n
  5. 选择默认行为并选择编辑选项来编辑该行为
  6. \n
  7. 在那里您可以看到选项响应标头策略 \xe2\x80\x93 可选
  8. \n
  9. 您可以使用现有的响应标头策略或创建新的响应标头策略
  10. \n
  11. 转到策略 - 响应标头,然后单击自定义策略下的“创建响应标头策略”。如果您有现有策略,请对其进行编辑。
  12. \n
  13. 就我而言,我已经有一个政策,所以我选择编辑该政策
  14. \n
  15. 转到自定义标头 \xe2\x80\x93 可选
  16. \n
  17. 添加 Cache-Control 标头以及所需的 max-age 值。如果需要,可以将该值设置为覆盖原点。
  18. \n
\n

自定义标头 UI 参考

\n
    \n
  1. 在默认行为中,在“响应标头”策略下选择您刚刚创建或编辑的标头。
  2. \n
\n

在此输入图像描述

\n


小智 6

正如James所提到的,您在创建分配时在 CF 设置中看到的 MAX TTL、MIN TTL 等定义了 CloudFront 分配和 Origin 的缓存行为。换言之,CloudFront 应在检查源之前将资产保留在边缘站点中的时间。例如,如果您有一个 S3 存储桶作为源,然后有一个 CloudFront 分配,通过设置 MAX TTL Min TTL 等,您可以告诉 CloudFront 它应该多久检查一次源(在本例中为 S3)以进行更改。您可以在 AWS Docs 中了解更多信息。管理内容在边缘缓存中停留的时间(到期)

在上面的示例中,您可以转到 S3 存储桶并设置Cache-Control. 欲了解更多信息,该怎么办呢读这一个


Jam*_*ean 5

您可以: 1. 配置源以添加 Cache-Control 标头作为响应。或者 2. 使用 Lambda@edge(查看器响应,因为您只想将其用于 google 页面洞察)在响应中添加缓存控制标头。示例: https: //github.com/jkrnak/serverless-lambda-at-edge/blob/master/handler.js

定义 TTL 不会添加任何缓存控制标头,它用于考虑需要缓存多长时间。