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

控制 CloudFront 缓存错误的时间长度

默认情况下,当来源返回 HTTP 4xx 或 5xx 状态代码时,CloudFront 将缓存这些错误响应五分钟,然后 CloudFront 向来源提交下一个对象请求以查看诱发错误的问题是否已得到解决以及请求的对象现在是否可用。

注意

您可以为 HTTP 状态代码 416 (Requested Range Not Satisfiable) 创建自定义错误页面,并更改在源向 CloudFront 返回状态代码 416 时 CloudFront 向查看器返回的 HTTP 状态代码。(有关更多信息,请参阅 更改 CloudFront 返回的响应代码。) 但是,CloudFront 不缓存状态代码 416 响应,因此您可以为状态代码 416 指定 Error Caching Minimum TTL (错误缓存最小 TTL) 的值,但 CloudFront 不使用它。

您可以为 CloudFront 缓存的每个 4xx 和 5xx 状态代码指定错误缓存时间长度(错误缓存最小 TTL)。——有关步骤,请参阅 配置错误响应行为。指定持续时间时,注意以下几点:

  • 如果您指定一个很短的错误缓存时间长度,则与指定较长的时间长度相比,CloudFront 将向源转发更多请求。对于 5xx 错误,这可能会加重原先导致源返回错误的问题。

  • 当源针对某个对象返回错误时,CloudFront 会通过错误响应或自定义错误页面响应对象请求,直到超过错误缓存时间长度。如果您指定一个很长的错误缓存持续时间,CloudFront 可能会在对象再次转为可用后的很长一段时间内继续使用错误响应或您的自定义错误页面来响应请求。

如果您要控制 CloudFront 为各个对象缓存错误的时间长度,可以配置源服务器以为该对象的错误响应添加相应标头:

  • 如果源添加 Cache-Control max-ageCache-Control s-maxage 指令或 Expires 标头:CloudFront 缓存错误响应的时间为标头中的值或错误缓存最小 TTL 值(以较大的值为准)。

    请注意,Cache-Control max-ageCache-Control s-maxage 值不能大于为提取错误页面的缓存行为设置的最大 TTL 值。

  • 如果源添加其他 Cache-Control 指令或不添加标头:CloudFront 缓存错误响应的时间等于错误缓存最小 TTL 值。

如果某一对象的 4xx 或 5xx 状态代码的过期时间超过您希望等待的时间,您可以使用所请求对象的 URL 使状态代码失效。如果源返回针对多个对象的错误响应,您需要分别使各个对象失效。有关使对象失效的更多信息,请参阅 使文件失效