为特定 HTTP 状态代码创建自定义错误页面
如果您希望显示自定义错误消息而不是默认消息 – 例如,使用与网站其他部分相同的格式设置的页面 – 则可以让 CloudFront 向查看器返回包含自定义错误消息的对象(例如,HTML 文件)。
要指定您希望返回的文件以及应为此文件返回的错误,请更新您的 CloudFront 分配以指定这些值。有关更多信息,请参阅配置错误响应行为。
例如,以下是一个自定义错误页面:
您可以为每个支持的 HTTP 状态代码指定一个不同的对象,也可以对所有支持的状态代码使用同一个对象。您可以选择为一些状态代码指定自定义错误页面,而不为另外一些状态代码指定自定义错误页面。
您通过 CloudFront 提供的对象出于各种原因可能不可用。可将这些原因归为以下两大类:
-
客户端错误表示请求出现问题。例如,具有指定名称的对象不可用,或用户不具有获取您 Amazon S3 存储桶中的对象所需的权限。当出现客户端错误时,源会向 CloudFront 返回一个 4xx 区间内的 HTTP 状态代码。
-
服务器错误表示源服务器出现问题。例如,HTTP 服务器繁忙或不可用。当出现服务器错误时,您的源服务器将向 CloudFront 返回一个 5xx 区间内的 HTTP 状态代码,或者在某一时间段内 CloudFront 未从您的源服务器获得响应,此时显示 504 状态代码(网关超时)。
CloudFront 可以为其返回自定义错误页面的 HTTP 状态代码包含以下各项:
-
400、403、404、405、414、416
-
500、501、502、503、504
注意
-
如果 CloudFront 检测到请求可能不安全,CloudFront 将返回 400(错误请求)错误,而不是自定义错误页面。
-
您可以为 HTTP 状态代码 416(无法满足请求的范围)创建自定义错误页面,并可以更改源向 CloudFront 返回状态代码 416 时 CloudFront 向查看器返回的 HTTP 状态代码。有关更多信息,请参阅 更改 CloudFront 返回的响应代码。但是,CloudFront 不缓存状态代码 416 响应,因此,即使您为状态代码 416 指定错误缓存最小 TTL 的值,CloudFront 也不会使用它。
-
在某些情况下,即使您对 CloudFront 进行配置,使其为 HTTP 503 状态代码返回自定义错误页面,CloudFront 也不会执行此操作。如果 CloudFront 错误代码为
Capacity Exceeded
或Limit Exceeded
,CloudFront 会将 503 状态代码(而非自定义错误页面)返回至查看器。 -
如果您创建了自定义错误页面,CloudFront 将针对以下响应代码返回
Connection: close
或Connection: keep-alive
:-
CloudFront 针对以下状态代码返回
Connection: close
:400、405、414、416、500、501 -
CloudFront 针对以下状态代码返回
Connection: keep-alive
:403、404、502、503、504
-
-
有关 CloudFront 如何处理来自您的源的错误响应的详细说明,请参阅CloudFront 如何处理来自源的 HTTP 4xx 和 5xx 状态代码。