Amazon CloudFront
开发人员指南 (API 版本 2016-09-29)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

管理内容保留在边缘缓存中的时间长度(过期)

您可控制文件在 CloudFront 转发另一请求到您的源之前留在 CloudFront 缓存中的时长。减少持续时间让您可提供动态内容。增加持续时间意味着您的用户将获得更好的性能,因为直接从边缘缓存提供文件的可能性更大。较长的持续时间还会减少源的负载。

通常,CloudFront 从边缘站点提供文件,直至超出您指定的缓存时长—直至文件过期。文件过期后,边缘站点下次收到用户对文件的请求时,CloudFront 会将请求转发到来源服务器,以确认缓存包含文件的最新版本。来自源的响应取决于文件是否已更改:

  • 如果 CloudFront 缓存已经具有最新版本,源返回 304 状态代码 (未修改)。

  • 如果 CloudFront 缓存没有最新版本,则源将返回 200 状态代码 (OK) 和文件的最新版本。

如果边缘站点中的某个文件不常被请求,则 CloudFront 可能会移除该文件—在文件到期日之前删除文件—,以便为最近常被请求的文件腾出空间。

默认情况下,每个文件在 24 小时后自动过期,但您可以通过以下两种方式来更改默认行为:

有关 Minimum TTLDefault TTLMaximum TTL 如何与 Cache-Control max-ageCache-Control s-maxage 指令以及 Expires 标头字段交互的更多信息,请参阅 指定 CloudFront 为 Web 分配缓存对象的时间长度

您还可以控制在 CloudFront 将另一个请求转发到源以再次尝试获取请求的对象之前,在 CloudFront 缓存中保留错误(例如,错误 404 Not Found)的时间。有关更多信息,请参阅CloudFront 如何处理和缓存来自源的 HTTP 4xx 和 5xx 状态代码

使用标头控制单独对象的缓存时间长度

您可以使用 Cache-ControlExpires 标头控制对象保留在缓存中的时间长度。Minimum TTLDefault TTLMaximum TTL 的设置也会影响缓存时间长度,不过此处只简要说明标头对缓存时间长度的影响:

  • 通过使用 Cache-Control max-age 指令,您可以指定在 CloudFront 再次从源服务器中获取对象之前希望在缓存中保留对象的时间长度(以秒为单位)。对于 Web 分配和 RTMP 分配,CloudFront 支持的最短过期时间分别为 0 秒和 3600 秒。最大值为 100 年。采用以下格式指定值:

    Cache-Control: max-age=

    例如,以下指令告诉 CloudFront 在缓存中将相关对象保留 3600 秒(一小时):

    Cache-Control: max-age=3600

    如果您希望在 CloudFront 边缘缓存中保留对象的时间不同于在浏览器缓存中的保留时间,您可以将 Cache-Control max-ageCache-Control s-maxage 指令一起使用。有关更多信息,请参阅指定 CloudFront 为 Web 分配缓存对象的时间长度

  • Expires标头字段让您使用 RFC 2616, Hypertext Transfer Protocol -- HTTP/1.1 Section 3.3.1, Full Date 中指定的格式指定过期日期和时间,例如:

    Sat, 27 Jun 2015 23:59:59 GMT

我们建议您使用Cache-Control max-age指令代替Expires标头字段,以控制对象缓存。如果您同时指定 Cache-Control max-ageExpires 值,则 CloudFront 仅使用 Cache-Control max-age 值。

有关更多信息,请参阅指定 CloudFront 为 Web 分配缓存对象的时间长度

您无法在查看器的 GET 请求中使用 HTTP Cache-ControlPragma 标头字段以强制 CloudFront 返回到对象的源服务器。CloudFront 将在查看器请求中忽略这些标头字段。

有关 Cache-ControlExpires 标头字段的更多信息,请参阅《RFC 2616,超文本传输协议 – HTTP/1.1》中以下章节:

关于如何使用适用于 PHP 的 AWS 开发工具包添加 Cache-ControlExpires 标头字段的示例,请参阅 Amazon Simple Storage Service 开发人员指南 中的使用适用于 PHP 的 AWS 开发工具包上传对象。一些第三方工具也可添加这些字段。

指定 CloudFront 为 Web 分配缓存对象的时间长度

对于 Web 分配,您可以使用 Cache-ControlExpires 标头以及 CloudFront 最小、最大和默认 TTL 值控制 CloudFront 在缓存中保留对象的时间长度(以秒为单位),在超过该时间长度后,才会将另一个请求转发到源。标头值还确定浏览器在缓存中保留对象的时间长度,超过该时间长度后才会将另一个请求转发到 CloudFront。

重要

如果将 CloudFront 配置为针对缓存行为将所有标头转发到源,则 CloudFront 绝不会缓存关联的对象。相反,CloudFront 将这些对象的所有请求转发到源。在该配置中,最小 TTL 的值必须为 0。有关更多信息,请参阅 根据请求标头缓存内容

要指定 Minimum TTL (最短 TTL)Maximum TTL (最长 TTL)Default TTL (默认 TTL) 的值,您必须为 Object Caching (对象缓存) 设置选择 Customize (自定义) 选项。

源配置 最小 TTL = 0 秒 最大 TTL > 0 秒

源将 Cache-Control max-age 指令添加到对象

CloudFront 缓存

CloudFront 缓存对象的时间长度为 Cache-Control max-age 指令或 CloudFront 最大 TTL 值(以较小值为准)。

浏览器缓存

浏览器缓存对象的时间长度为 Cache-Control max-age 指令的值。

CloudFront 缓存

CloudFront 缓存取决于 CloudFront 最小 TTL 和最大 TTL 以及 Cache-Control max-age 指令的值:

  • 最小 TTL < max-age < 最大 TTL

    CloudFront 缓存对象的时间长度为 Cache-Control max-age 指令的值。

  • max-age < 最小 TTL

    CloudFront 缓存对象的时间长度为 CloudFront 最小 TTL 值。

  • max-age > 最大 TTL

    CloudFront 缓存对象的时间长度为 CloudFront 最大 TTL 值。

浏览器缓存

浏览器缓存对象的时间长度为 Cache-Control max-age 指令的值。

源不会将 Cache-Control max-age 指令添加到对象

CloudFront 缓存

CloudFront 缓存对象的时间长度为 CloudFront 默认 TTL 值。

浏览器缓存

视浏览器而定。

CloudFront 缓存

CloudFront 缓存对象的时间长度为 CloudFront 最小 TTL 或默认 TTL(以较大的值为准)。

浏览器缓存

视浏览器而定。

源将 Cache-Control max-ageCache-Control s-maxage 指令添加到对象

CloudFront 缓存

CloudFront 缓存对象的时间长度为 Cache-Control s-maxage 指令或 CloudFront 最大 TTL 值(以较小值为准)。

浏览器缓存

浏览器缓存对象的时间长度为 Cache-Control max-age 指令的值。

CloudFront 缓存

CloudFront 缓存取决于 CloudFront 最小 TTL 和最大 TTL 以及 Cache-Control s-maxage 指令的值:

  • 最小 TTL < s-maxage < 最大 TTL

    CloudFront 缓存对象的时间长度为 Cache-Control s-maxage 指令的值。

  • s-maxage < 最小 TTL

    CloudFront 缓存对象的时间长度为 CloudFront 最小 TTL 值。

  • s-maxage > 最大 TTL

    CloudFront 缓存对象的时间长度为 CloudFront 最大 TTL 值。

浏览器缓存

浏览器缓存对象的时间长度为 Cache-Control max-age 指令的值。

源将 Expires 标头添加到对象

CloudFront 缓存

CloudFront 缓存对象,直至到达 Expires 标头中的日期或 CloudFront 最大 TTL 值(以先到者为准)。

浏览器缓存

浏览器缓存对象,直至 Expires 标头中的日期。

CloudFront 缓存

CloudFront 缓存取决于 CloudFront 最小 TTL 和最大 TTL 以及 Expires 标头的值:

  • 最小 TTL < Expires < 最大 TTL

    CloudFront 缓存对象,直至到达 Expires 标头中的日期和时间。

  • Expires < 最小 TTL

    CloudFront 缓存对象的时间长度为 CloudFront 最小 TTL 值。

  • Expires > 最大 TTL

    CloudFront 缓存对象的时间长度为 CloudFront 最大 TTL 值。

浏览器缓存

浏览器缓存对象,直至 Expires 标头中的日期和时间。

源将 Cache-Control: no-cacheno-store 和/或private指令添加到对象

CloudFront 和浏览器以标头为准。

有关 CloudFront 处理 Cache-Control: no-cache 标头方式的例外情况,请参阅同一对象的并行请求 (流量高峰)

CloudFront 缓存

CloudFront 缓存对象的时间长度为 CloudFront 最小 TTL 值。

浏览器缓存

浏览器以标头为准。

有关如何使用 CloudFront 控制台更改 Web 分配的设置的信息,请参阅更新分配。有关如何使用 CloudFront API 更改 Web 分配设置的信息,请参阅 PUT 配置

指定 CloudFront 为 RTMP 分配缓存对象的最短时间

对于 RTMP 分配,默认情况下,CloudFront 在边缘缓存保留对象 24 小时。您可以将 Cache-ControlExpires 标头添加到对象以更改 CloudFront 在边缘缓存中保留对象的时间长度,在超过该时间长度后,才会将另一个请求转发到源。最短时间长度为 3600 秒 (1 小时)。如果您指定一个较低的值,则 CloudFront 将使用 3600 秒。

使用 Amazon S3 控制台将标头添加到您的对象

注意

在 Amazon S3 控制台上,一次只能向一个对象添加标题;而使用一些第三方工具,一次可向多个 Amazon S3 对象添加标题。有关支持 Amazon S3 的第三方工具的更多信息,请在 Web 上搜索 AWS S3 third party tools

使用 Amazon S3 控制台将 Cache-ControlExpires 标头字段添加到 Amazon S3 对象

  1. 登录 AWS 管理控制台并打开 Amazon S3 控制台 (https://console.amazonaws.cn/s3)。

  2. 在 Amazon S3 控制台的 Bucket name (存储桶名称) 列表中,选择包含相关文件的存储桶的名称。

  3. Name (名称) 列表中,选择要将标头添加到的对象的名称。

  4. 选择 Properties,然后选择 Metadata

  5. 选择 Add Metadata (添加元数据),然后在 Key (键) 菜单中,选择 Cache-ControlExpires (过期)

  6. Value (值) 字段中,键入下列内容之一:

    • 对于 Cache-Control 字段,键入:

      max-age=number of seconds that you want objects to stay in a CloudFront edge cache

    • 对于过期字段,键入 HTML 格式的日期和时间。

  7. 选择 Save