管理内容保留在缓存中的时间长度(过期)
您可控制文件在 CloudFront 转发另一请求到您的源之前留在 CloudFront 缓存中的时长。减少持续时间让您可提供动态内容。增加持续时间意味着您的用户将获得更好的性能,因为直接从边缘缓存提供文件的可能性更大。较长的持续时间还会减少源的负载。
通常,CloudFront 从边缘站点提供文件,直至超出您指定的缓存时长,直至文件过期。文件过期后,边缘站点下次收到用户对文件的请求时,CloudFront 会将请求转发到来源服务器,以确认缓存包含文件的最新版本。来自源的响应取决于文件是否已更改:
-
如果 CloudFront 缓存已具有最新版本,则源将返回状态代码
304 Not Modified
。 -
如果 CloudFront 缓存没有最新版本,则源将返回
200 OK
状态代码和文件的最新版本。
如果边缘站点中的某个文件不常被请求,则 CloudFront 可能会移除该文件 – 在文件到期日之前删除文件,以便为最近常被请求的文件腾出空间。
默认情况下,每个文件在 24 小时后自动过期,但您可以通过以下两种方式来更改默认行为:
-
要更改所有匹配相同路径模式的文件的缓存持续时间,可以更改缓存行为的最短 TTL、最长 TTL 和默认 TTL 的 CloudFront 设置。有关各个设置的信息,请参阅 您创建或更新分配时指定的值 中的最短 TTL、最长 TTL 和默认 TTL。要使用这些设置,必须在创建或更新 CloudFront 分配时,为对象缓存设置选择自定义选项。有关更多信息,请参阅 您创建或更新分配时指定的值 中的对象缓存。
-
要更改单个文件的缓存持续时间,您可以配置源以向文件中添加
Cache-Control max-age
或Cache-Control s-maxage
指令或者Expires
标头字段。有关更多信息,请参阅使用标头控制单独对象的缓存时间长度。
有关最短 TTL、默认 TTL 和最长 TTL 如何与 Cache-Control
max-age
和 Cache-Control s-maxage
指令以及 Expires
标头字段交互的更多信息,请参阅指定 CloudFront 为 Web 分配缓存对象的时间长度。
您还可以控制在 CloudFront 将另一个请求转发到源以再次尝试获取请求的对象之前,在 CloudFront 缓存中保留错误(例如,404, Not Found
)的时间。有关更多信息,请参阅CloudFront 如何处理和缓存来自源的 HTTP 4xx 和 5xx 状态代码。
主题
使用标头控制单独对象的缓存时间长度
您可以使用 Cache-Control
和 Expires
标头控制对象保留在缓存中的时间长度。Minimum TTL、Default TTL 和 Maximum 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-age
和Cache-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-age
和 Expires
的值,CloudFront 则只使用 Cache-Control max-age
的值。
有关更多信息,请参阅 指定 CloudFront 为 Web 分配缓存对象的时间长度。
您不能使用查看器的 GET
请求中的 HTTP Cache-Control
或 Pragma
标头字段来强制 CloudFront 返回到对象的源服务器。CloudFront 将忽略查看器请求中的这些标头字段。
有关 Cache-Control
和 Expires
标头字段的更多信息,请参阅《RFC 2616,超文本传输协议 – HTTP/1.1》中以下章节:
关于如何使用适用于 PHP 的 AWS 软件开发工具包添加 Cache-Control
和 Expires
标头字段的示例,请参阅《Amazon Simple Storage Service 开发人员指南》中的使用适用于 PHP 的 AWS 软件开发工具包上传对象。一些第三方工具也可添加这些字段。
指定 CloudFront 为 Web 分配缓存对象的时间长度
对于 Web 分配,您可以使用 Cache-Control
或 Expires
标头,以及 CloudFront 最短、最长和默认 TTL 值来控制 CloudFront 在缓存中保留对象的时长(以秒为单位),超过该时长后才会将另一个请求转发到源。标头值还确定浏览器在缓存中保留对象的时间长度,超过该时间长度后才会将另一个请求转发到
CloudFront。
如果您将 CloudFront 配置为针对缓存行为将所有标头转发到源,则 CloudFront 绝不会缓存关联的对象。相反,CloudFront 会将这些对象的所有请求转发到源。在该配置中,最小 TTL 的值必须为 0。有关更多信息,请参阅 根据请求标头缓存内容。
要指定最短 TTL、最长 TTL 和默认 TTL 的值,您必须为对象缓存设置选择自定义选项。
源配置 | 最小 TTL = 0 秒 | 最大 TTL > 0 秒 |
---|---|---|
源将 |
CloudFront 缓存 CloudFront 缓存对象的时长为 浏览器缓存 浏览器缓存对象的时长为 |
CloudFront 缓存 CloudFront 缓存取决于 CloudFront 最短 TTL 和最长 TTL 的值以及
浏览器缓存 浏览器缓存对象的时长为 |
源不会将 |
CloudFront 缓存 CloudFront 缓存对象的时间长度为 CloudFront 默认 TTL 值。 浏览器缓存 视浏览器而定。 |
CloudFront 缓存 CloudFront 缓存对象的时长为 CloudFront 最小 TTL 或默认 TTL(以较大的值为准)。 浏览器缓存 视浏览器而定。 |
源将 |
CloudFront 缓存 CloudFront 缓存对象的时长为 浏览器缓存 浏览器缓存对象的时长为 |
CloudFront 缓存 CloudFront 缓存取决于 CloudFront 最短 TTL 和最长 TTL 的值以及
浏览器缓存 浏览器缓存对象的时长为 |
源将 |
CloudFront 缓存 CloudFront 缓存对象,直至 浏览器缓存 浏览器缓存对象,直至 |
CloudFront 缓存 CloudFront 缓存取决于 CloudFront 最短 TTL 和最长 TTL 以及
浏览器缓存 浏览器缓存对象,直至 |
源将 |
CloudFront 和浏览器以标头为准。 有关 CloudFront 如何处理 |
CloudFront 缓存 CloudFront 缓存对象的时长为 CloudFront 最小 TTL 值。 浏览器缓存 浏览器以标头为准。 |
有关如何使用 CloudFront 控制台更改 Web 分配的设置的信息,请参阅更新分配。有关如何使用 CloudFront API 更改 Web 分配的设置的信息,请参阅 PUT 配置。
指定 CloudFront 为 RTMP 分配缓存对象的最短时间
对于 RTMP 分配,默认情况下,CloudFront 在边缘缓存保留对象 24 小时。您可以将 Cache-Control
或 Expires
标头添加到对象以更改 CloudFront 在边缘缓存中保留对象的时间长度,在超过该时间长度后,才会将另一个请求转发到源。最短时间长度为 3600 秒 (1 小时)。如果您指定了较低的值,则
CloudFront 将使用 3600 秒。
使用 Amazon S3 控制台向对象添加标头
使用 Amazon S3 控制台,您一次只能为一个对象添加标头;而使用一些第三方工具,您一次可以为多个 Amazon S3 对象添加标头。有关支持 Amazon S3
的第三方工具的更多信息,请在 Web 上搜索 AWS S3 third party tools
。
使用 Amazon S3 控制台向 Amazon S3 对象添加 Cache-Control
或 Expires
标头字段
-
登录 AWS 管理控制台,并通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3
。 -
在 Amazon S3 控制台的存储桶名称列表中,选择包含相关文件的存储桶的名称。
-
在 Name (名称) 列表中,选择要将标头添加到的对象的名称。
-
选择 Properties,然后选择 Metadata。
-
选择 Add Metadata (添加元数据),然后在 Key (键) 菜单中,选择 Cache-Control 或 Expires (过期)。
-
在 Value (值) 字段中,键入下列内容之一:
-
对于
Cache-Control
字段,键入:max-age=
number of seconds that you want objects to stay in a CloudFront edge cache
-
对于过期字段,键入 HTML 格式的日期和时间。
-
-
选择 Save。