本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
自定义源的请求和响应行为
如何 CloudFront 处理请求并将其转发到您的自定义来源
本主题包含有关如何 CloudFront 处理查看者请求以及如何将请求转发到您的自定义来源的信息。
主题
身份验证
对于DELETE
GET
、HEAD
、PATCH
、POST
、和PUT
请求,如果您配置为将Authorization标头转发 CloudFront到您的源,则可以将源服务器配置为请求客户端身份验证。
对于OPTIONS
请求,只有在使用以下 CloudFront 设置时,才能将源服务器配置为请求客户端身份验证:
-
配置 CloudFront 为不缓存对
OPTIONS
请求的响应。
您可以配置 CloudFront 为使用 HTTP 或 HTTPS 将请求转发到您的源;有关更多信息,请参阅将 HTTPS 与 CloudFront。
缓存持续时间和最小 TTL
要控制您的对象在将另一个请求 CloudFront 转发到您的源之前在 CloudFront 缓存中停留多长时间,您可以:
-
配置您的源,以将
Cache-Control
或Expires
标题字段添加到每个对象。 -
在 CloudFront 缓存行为中为最小 TTL 指定一个值。
-
使用默认值 24 小时。
有关更多信息,请参阅 管理内容保留在缓存中的时间长度(过期)。
客户端 IP 地址
如果查看者向其 CloudFront 发送请求但不包含X-Forwarded-For
请求标头,则从 TCP 连接中 CloudFront 获取查看者的 IP 地址,添加包含 IP 地址的X-Forwarded-For
标头,然后将请求转发到源。例如,如果192.0.2.2
从 TCP 连接中 CloudFront 获取 IP 地址,则会将以下标头转发到源:
X-Forwarded-For: 192.0.2.2
如果查看者向其发送请求 CloudFront 并包含X-Forwarded-For
请求标头,则从 TCP 连接中 CloudFront 获取查看者的 IP 地址,将其附加到X-Forwarded-For
标头的末尾,然后将请求转发到源。例如,如果查看者请求包含X-Forwarded-For:
192.0.2.4,192.0.2.3
并192.0.2.2
从 TCP 连接中 CloudFront 获取 IP 地址,则它会将以下标头转发到源:
X-Forwarded-For: 192.0.2.4,192.0.2.3,192.0.2.2
某些应用程序,例如负载均衡器(包括 Elastic Load Balancing)、Web 应用程序防火墙、反向代理、入侵防御系统和 API Gateway,会将转发请求的 CloudFront 边缘服务器的 IP 地址附加到标头的末尾。X-Forwarded-For
例如,如果请求X-Forwarded-For: 192.0.2.2
中 CloudFront 包含转发给 ELB 且 CloudFront 边缘服务器的 IP 地址为 192.0.2.199,则您的 EC2 实例收到的请求将包含以下标头:
X-Forwarded-For: 192.0.2.2,192.0.2.199
注意
X-Forwarded-For
标头包含 IPv4 地址(例如 192.0.2.44)和 IPv6 地址(例如 2001:0db8:85a3::8a2e:0370:7334)。
另请注意,当前服务器路径上的每个节点都可以修改X-Forwarded-For
标头 (CloudFront)。有关更多信息,请参阅 RFC 7239
客户端 SSL 身份验证
CloudFront 不支持使用客户端 SSL 证书进行客户端身份验证。如果源请求客户端证书,则 CloudFront 会丢弃该请求。
压缩
有关更多信息,请参阅 提供压缩文件。
有条件请求
当 CloudFront 收到对已从边缘缓存中过期的对象的请求时,它会将请求转发到源,以获取该对象的最新版本,或者从源处获得 CloudFront 边缘缓存已有最新版本的确认。通常,当源最后一次将对象发送到时 CloudFront,它会在响应中包含一个ETag
LastModified
值、一个值或两个值。在 CloudFront 转发到源的新请求中, CloudFront 添加以下一项或两项:
-
If-Match
或If-None-Match
标头,其中包括对象过期版本的ETag
值。 -
If-Modified-Since
标头,其中包含对象过期版本的LastModified
值。
Origin 使用此信息来确定对象是否已更新,从而确定是将整个对象返回到 HTTP 304 状态码, CloudFront 还是仅返回 HTTP 304 状态码(未修改)。
Cookie
您可以配置为 CloudFront 将 Cookie 转发到您的来源。有关更多信息,请参阅 根据 Cookie 缓存内容。
跨源资源共享 (CORS)
如果您 CloudFront 想遵守跨域资源共享设置,请配置 CloudFront 为将Origin
标头转发到您的来源。有关更多信息,请参阅根据请求标头缓存内容。
加密
您可以使用查看者使用的协议,要求查看者使用 HTTPS CloudFront 向您的自定义源发送请求, CloudFront 并要求将请求转发到您的自定义源。有关更多信息,请参阅以下分配设置:
CloudFront 使用 SSLv3、TLSv1.0、TLSv1.1 和 TLSv1.2 协议将 HTTPS 请求转发到源服务器。对于自定义源,您可以选择您希望 CloudFront 在与源通信时使用的 SSL 协议:
-
如果您使用的是 CloudFront 控制台,请使用 O rigin SSL 协议复选框选择协议。有关更多信息,请参阅创建分配。
-
如果您使用的是 CloudFront API,请使用
OriginSslProtocols
元素指定协议。有关更多信息,请参阅 Amazon CloudFront API 参考DistributionConfig中的OriginSslProtocols和。
如果源是 Amazon S3 存储桶,则 CloudFront 始终使用 TLSv1.2。
重要
不支持其他版本的 SSL 和 TLS。
有关将 HTTPS 与配合使用的更多信息 CloudFront,请参阅将 HTTPS 与 CloudFront。有关 CloudFront 支持查看者与您的来源之间以及 CloudFront与您的来源之间的 HTTPS 通信的密码列表,请参阅。 CloudFront 查看器与之间支持的协议和密码 CloudFront
包含正文的 GET 请求
如果查看者GET
请求包含正文,则会向查看者 CloudFront 返回 HTTP 状态码 403(禁止)。
HTTP 方法
如果您配置 CloudFront 为处理其支持的所有 HTTP 方法,则会 CloudFront接受来自查看者的以下请求并将其转发到您的自定义来源:
-
DELETE
-
GET
-
HEAD
-
OPTIONS
-
PATCH
-
POST
-
PUT
CloudFront 总是缓存对GET
和HEAD
请求的响应。您也可以配置为缓存 CloudFront 对OPTIONS
请求的响应。 CloudFront 不缓存对使用其他方法的请求的响应。
有关如何配置是否让自定义源处理这些方法的信息,请参阅该源的文档。
重要
如果您配置 CloudFront 为接受所有 CloudFront 支持的 HTTP 方法并将其转发到您的源,请将您的源服务器配置为处理所有方法。例如,如果您因为要使用而配置 CloudFront 为接受和转发这些方法POST
,则必须将源服务器配置为适当地处理DELETE
请求,这样查看者就无法删除您不希望他们删除的资源。有关更多信息,请参阅您的 HTTP 服务器的文档。
HTTP 请求标头和 CloudFront 行为(自定义来源和 Amazon S3 来源)
下表列出了 HTTP 请求标头,您可以将其转发到自定义源和 Amazon S3 源(有例外情况需要注意)。对于每个标头,该表包含有关以下内容的信息:
-
CloudFront 如果您未配置 CloudFront 为将标头转发到您的来源,则会出现行为,这会 CloudFront 导致根据标头值缓存对象。
-
是否可以配置为 CloudFront 根据该标头的标头值缓存对象。
您可以配置 CloudFront 为根据
Date
和User-Agent
标头中的值缓存对象,但我们不建议这样做。这些标头有许多可能的值,根据它们的值进行缓存将导致 CloudFront 向您的源转发更多的请求。
有关基于标头值的缓存操作的更多信息,请参阅根据请求标头缓存内容。
标头 | 未配置为根据标头值 CloudFront 进行缓存时的行为 | 支持基于标头值的缓存操作 |
---|---|---|
其他定义的标头 |
旧版缓存设置-将标题 CloudFront 转发到您的来源。 |
是 |
|
CloudFront 移除标题。 |
是 |
|
CloudFront 移除标题。 |
是 |
|
如果该值包含 |
是 |
|
CloudFront 移除标题。 |
是 |
|
|
是 |
|
CloudFront 将标题转发到您的来源。 |
否 |
|
CloudFront 在将请求转发到您的源站之前不会添加标头。 有关更多信息,请参阅 基于请求的协议配置缓存。 |
是 |
|
CloudFront 在将请求转发到您的源站之前不会添加标头。 有关更多信息,请参阅 基于设备类型配置缓存。 |
是 |
|
CloudFront 在将请求转发到您的源站之前不会添加标头。 有关更多信息,请参阅 基于设备类型配置缓存。 |
是 |
|
CloudFront 在将请求转发到您的源站之前不会添加标头。 有关更多信息,请参阅 基于设备类型配置缓存。 |
是 |
|
CloudFront 在将请求转发到您的源站之前不会添加标头。 |
是 |
|
CloudFront 在将请求转发到您的源 |
否 |
|
CloudFront 将标题转发到您的来源。 |
否 |
|
CloudFront 将标题转发到您的来源。 |
是 |
|
CloudFront 将标题转发到您的来源。 |
是 |
|
如果您配置为 CloudFront 转发 Cookie,它会将标 |
否 |
|
CloudFront 将标题转发到您的来源。 |
是,但建议不要这样做 |
|
CloudFront 移除标题。 |
是 |
|
CloudFront 将标题转发到您的来源。 |
是 |
|
CloudFront 将该值设置为与请求的对象关联的来源的域名。 您无法根据 Amazon S3 的主机标头或 MediaStore来源进行缓存。 |
是 (自定义) 否(S3 和 MediaStore) |
|
CloudFront 将标题转发到您的来源。 |
是 |
|
CloudFront 将标题转发到您的来源。 |
是 |
|
CloudFront 将标题转发到您的来源。 |
是 |
|
CloudFront 将标题转发到您的来源。 |
是 |
|
CloudFront 将标题转发到您的来源。 |
是 |
|
CloudFront 将标题转发到您的来源。 |
否 |
|
CloudFront 将标题转发到您的来源。 |
是 |
|
CloudFront 将标题转发到您的来源。 |
否 |
|
CloudFront 移除标题。 |
否 |
|
CloudFront 移除标题。 |
否 |
|
CloudFront 移除标题。 |
否 |
|
CloudFront 将标题转发到您的来源。有关更多信息,请参阅 如何 CloudFront 处理对象的部分请求(范围 GET)。 |
是 (默认值) |
|
CloudFront 移除标题。 |
是 |
|
CloudFront 将标题转发到您的来源。 |
否 |
|
CloudFront 移除标题。 |
否 |
|
CloudFront 移除标题。 |
否 |
|
CloudFront 将标题转发到您的来源。 |
否 |
|
CloudFront 移除标头,除非您已建立WebSocket 连接。 |
否( WebSocket 连接除外) |
|
CloudFront 将此标题字段的值替换为 |
是,但建议不要这样做 |
|
CloudFront 将标题转发到您的来源。 |
是 |
|
CloudFront 将标题转发到您的来源。 |
是 |
|
CloudFront 在将请求转发到您的来源之前,将标头添加到查看者请求中。标头值包含一个用于唯一标识请求的加密的字符串。 |
否 |
|
CloudFront 移除所有 |
否 |
|
CloudFront 将标题转发到您的来源。有关更多信息,请参阅 客户端 IP 地址。 |
是 |
|
CloudFront 移除标题。 |
否 |
|
CloudFront 移除标题。 |
是 |
|
CloudFront 移除标题。 |
否 |
HTTP 版本
CloudFront 使用 HTTP/1.1 将请求转发到您的自定义来源。
请求的最大长度与 URL 的最大长度
请求的最大长度,包括路径、查询字符串(如果有)以及标头,是 20480 个字节。
CloudFront 根据请求构造一个 URL。此 URL 的最大长度是 8192 个字节。
如果请求或 URL 超过这些最大值,则会向查看者 CloudFront 返回 HTTP 状态代码 413 “请求实体太大”,然后终止与查看器的 TCP 连接。
OCSP Stapling
当查看者提交对象的 HTTPS 请求时, CloudFront 或者查看者必须向证书颁发机构 (CA) 确认该域的 SSL 证书尚未被吊销。OCSP 装订允许验证证书并缓存 CloudFront 来自 CA 的响应,从而加快证书验证速度,因此客户端无需直接向 CA 验证证书。
当 CloudFront 收到针对同一域中对象的大量 HTTPS 请求时,OCSP 装订的性能提高更为明显。 CloudFront 边缘站点中的每个服务器必须提交一个单独的验证请求。当 CloudFront 收到针对同一域的大量 HTTPS 请求时,边缘位置的每台服务器很快就会收到来自 CA 的响应,表示它可以在 SSL 握手中 “装订” 数据包;当查看者对证书有效感到满意时, CloudFront 可以为请求的对象提供服务。如果您的分配未在 CloudFront 边缘站点中产生大量流量,则新请求更有可能定向到尚未向 CA 验证证书的服务器。在这种情况下,查看器单独执行验证步骤, CloudFront 服务器为对象提供服务。该 CloudFront 服务器还向 CA 提交验证请求,因此下次收到包含相同域名的请求时,它会收到来自 CA 的验证响应。
持久性连接
当 CloudFront 收到来自您的来源的响应时,它会尝试将连接保持几秒钟,以防在此期间收到另一个请求。保持持久性连接可节省重新建立 TCP 连接以及针对后续请求再次进行 TLS 握手所需的时间。
有关更多信息 (包括如何配置持久性连接),请参阅源保持连接超时(仅自定义源)一节中的您创建或更新分配时指定的值。
协议
CloudFront 根据以下条件将 HTTP 或 HTTPS 请求转发到源服务器:
-
查看者发送到的请求的协议 CloudFront,可以是 HTTP 或 HTTPS。
-
CloudFront控制台中 Origin Pro tocol Policy 字段的值,或者如果您使用的是 CloudFront API,则为
DistributionConfig
复杂类型的OriginProtocolPolicy
元素。在 CloudFront 控制台中,选项有 “仅限 HTTP”、“仅限 HTTPS” 和 “匹配查看器”。
如果您指定仅 HTTP 或仅 HTTPS,则 CloudFront 仅使用指定的协议将请求转发到源服务器,而不考虑查看器请求中的协议。
如果您指定 Match Vie CloudFront wer,则使用查看器请求中的协议将请求转发到源服务器。请注意,即使查看者同时使用 HTTP 和 HTTPS 协议发出请求,也只能 CloudFront 缓存对象一次。
重要
如果使用 HTTPS 协议将请求 CloudFront 转发到源,并且源服务器返回无效的证书或自签名证书,则会断开 TC CloudFront P 连接。
有关如何使用 CloudFront 控制台更新发行版的信息,请参阅更新分配。有关如何使用 CloudFront API 更新分配的信息,请转至 Amazon CloudFront API 参考UpdateDistribution中的。
查询字符串
您可以配置是否将查询字符串参数 CloudFront 转发到您的源。有关更多信息,请参阅 根据查询字符串参数缓存内容。
源连接超时和尝试次数
源连接超时是指尝试与源建立连接时 CloudFront 等待的秒数。
源连接尝试次数是 CloudFront 尝试连接到源站的次数。
这些设置共同决定了在故障转移到辅助源(如果是源组)或向查看者返回错误响应之前 CloudFront 尝试连接到源站的时间。默认情况下, CloudFront 在尝试连接到辅助源或返回错误响应之前,会等待 30 秒(3 次尝试,每次尝试 10 秒)。您可以通过指定更短的连接超时和/或更少的尝试次数来减少此时间。
有关更多信息,请参阅 控制源超时和尝试次数。
源响应超时
源响应超时(也称为源读取超时 或源请求超时)同时适用于以下两种情况:
-
将请求转发到源服务器后 CloudFront 等待响应的时间(以秒为单位)。
-
在收到来自源端的响应数据包之后到收到下一个数据包之前 CloudFront 等待的时间,以秒为单位。
CloudFront 行为取决于查看者请求的 HTTP 方法:
-
GET
和HEAD
请求 — 如果源站在响应超时期间没有响应或停止响应,则 CloudFront 断开连接。如果指定的源连接尝试次数大于 1,则再次 CloudFront 尝试以获得完整的响应。 CloudFront 最多尝试 3 次,具体取决于源连接尝试次数设置的值。如果源站在最后一次尝试中 CloudFront 没有响应,则在收到有关同一来源的内容的另一个请求之前不会重试。 -
DELETE
、OPTIONS
、PATCH
PUT
、和POST
请求 — 如果源在 30 秒内没有响应 CloudFront ,则断开连接并且不会再次尝试联系源。如有必要,客户端可以重新提交请求。
有关更多信息(包括如何配置源响应超时),请参阅响应超时(仅自定义源)。
针对同一对象的并发请求(请求折叠)
当 CloudFront 边缘站点收到对象请求但该对象不在缓存中或缓存的对象已过期时,会 CloudFront 立即将请求发送到源。但是,如果同时有针对同一对象的请求(也就是说,如果对同一对象(使用相同的缓存密钥)的其他请求在 CloudFront 收到第一个请求的响应之前到达边缘位置,则会在将其他请求转发到源之前CloudFront 暂停。这种短暂的停顿有助于减轻原点的负载。 CloudFront 将原始请求的响应发送给它在暂停期间收到的所有请求。这称为请求折叠。在 CloudFront 日志中,第一个请求在x-edge-result-type
字段Miss
中标识为 a,折叠的请求被标识为Hit
。有关 CloudFront 日志的更多信息,请参阅CloudFront 和边缘函数日志。
CloudFront 仅折叠共享缓存密钥的请求。如果其他请求不共享相同的缓存密钥,例如您配置 CloudFront 为基于请求标头、Cookie 或查询字符串进行缓存,则会将所有具有唯一缓存密钥的请求 CloudFront 转发到您的源。
如果您想防止所有请求崩溃,则可以使用托管缓存策略CachingDisabled
,该策略还可以防止缓存。有关更多信息,请参阅使用托管缓存策略。
如果要阻止特定对象的请求折叠,可以将缓存行为的最小 TTL 设置为 0,并配置源以发送 Cache-Control:
private
、Cache-Control: no-store
、Cache-Control:
no-cache
、Cache-Control: max-age=0
或 Cache-Control: s-maxage=0
。这些配置将增加源站的负载,并给在等待第一个请求的响应时暂停 CloudFront 的同步请求带来额外的延迟。
User-Agent
标头
如果您 CloudFront 想根据用户用于查看您的内容的设备缓存不同版本的对象,我们建议您将以下一个或多个标头配置 CloudFront 为将以下一个或多个标头转发到您的自定义来源:
-
CloudFront-Is-Desktop-Viewer
-
CloudFront-Is-Mobile-Viewer
-
CloudFront-Is-SmartTV-Viewer
-
CloudFront-Is-Tablet-Viewer
根据User-Agent
标头的值, CloudFront 将这些标头的值设置为true
或false
在将请求转发到您的源之前。如果某个设备归入多个类别中,则多个值可能为 true
。例如,对于某些平板电脑设备, CloudFront 可以将CloudFront-Is-Mobile-Viewer
和同时设置CloudFront-Is-Tablet-Viewer
为true
。有关配置为基于请求标头 CloudFront 进行缓存的更多信息,请参阅根据请求标头缓存内容。
您可以配置 CloudFront 为根据User-Agent
标题中的值缓存对象,但我们不建议这样做。标User-Agent
头有许多可能的值,基于这些值的缓存会导致 CloudFront 向您的源转发更多的请求。
如果您未配置 CloudFront 为根据User-Agent
标头中的值缓存对象,则会在将请求转发到您的源之前 CloudFront 添加一个具有以下值的User-Agent
标头:
User-Agent = Amazon CloudFront
CloudFront 无论查看者的请求是否包含标头,都会添加此标User-Agent
头。如果查看者的请求包含User-Agent
标头,则将其 CloudFront 删除。
如何 CloudFront 处理来自自定义来源的响应
本主题包含有关如何 CloudFront 处理来自您的自定义来源的响应的信息。
主题
100 Continue
响应
您的源站不能向发送多个 “100-Continue” 回复。 CloudFront在第一个 100-Continue 响应之后, CloudFront 预计会有 HTTP 200 OK 响应。如果您的源站在第一个响应之后再发送 100-Continue 响应,则 CloudFront 会返回错误。
缓存
-
确保源服务器为
Date
和Last-Modified
标头字段设置有效、准确的值。 -
CloudFront 通常在来自来源的响应中使用
Cache-Control: no-cache
标头。有关例外,请参阅针对同一对象的并发请求(请求折叠)。
已取消的请求
如果某个对象不在边缘缓存中,并且如果查看者在从您的源端 CloudFront 获取对象之后但在交付请求的对象之前终止了会话(例如,关闭浏览器),则 CloudFront 不会将该对象缓存到边缘位置。
内容协商
如果您的源在响应Vary:*
中返回,并且相应缓存行为的最小 TTL 值为 0, CloudFront 则会缓存该对象,但仍会将对该对象的所有后续请求转发到源,以确认缓存中包含该对象的最新版本。CloudFront 不包含任何条件标题,例如If-None-Match
或If-Modified-Since
。因此,您的源会将对象返回到, CloudFront 以响应每个请求。
如果您的源在响应Vary:*
中返回,并且相应缓存行为的最小 TTL 值为任何其他值,则按中所 CloudFront 删除或替换的 HTTP 响应标头述 CloudFront 处理Vary
标头。
Cookie
如果您为缓存行为启用 Cookie,并且如果源端返回带有对象的 Cookie,则会同时 CloudFront 缓存对象和 Cookie。请注意,这降低了对象的缓存能力。有关更多信息,请参阅 根据 Cookie 缓存内容。
中断的 TCP 连接
如果在您的源向返回对象时,源 CloudFront 与源之间的 TCP 连接中断 CloudFront,则 CloudFront 行为取决于您的源是否在响应中包含Content-Length
标头:
-
Content-Length 标头 — 当查看者从您的来源获取对象时,将对象 CloudFront 返回给查看者。但是,如果
Content-Length
标头值与对象大小不匹配,则 CloudFront 不会缓存对象。 -
Transfer-Encoding:Chunked — 当查看者从你的原点获取对象时,将对象 CloudFront 返回给查看者。但是,如果分块响应未完成,则 CloudFront 不会缓存对象。
-
没有 Content-Length 标头 — 将对象 CloudFront 返回给查看者并对其进行缓存,但对象可能不完整。如果没有
Content-Length
标头, CloudFront 则无法确定 TCP 连接是意外中断还是故意中断。
我们建议您将 HTTP 服务器配置为添加Content-Length
标头,以 CloudFront 防止缓存部分对象。
CloudFront 删除或替换的 HTTP 响应标头
CloudFront 在将来自您的来源的响应转发给查看者之前,删除或更新以下标题字段:
-
Set-Cookie
— 如果您配置为 CloudFront 转发 Cookie,它会将Set-Cookie
标题字段转发给客户端。有关更多信息,请参阅根据 Cookie 缓存内容。 -
Trailer
-
Transfer-Encoding
— 如果您的来源返回此标题字段,则在将响应返回给查看者chunked
之前,将该值CloudFront 设置为。 -
Upgrade
-
Vary
– 请注意以下几点:-
如果您配置 CloudFront 为将任何设备特定的标头转发到您的源(
CloudFront-Is-Desktop-Viewer
、、CloudFront-Is-Mobile-Viewer
CloudFront-Is-SmartTV-Viewer
、CloudFront-Is-Tablet-Viewer
),并且将源配置为返回Vary:User-Agent
到 CloudFront, CloudFront 则返回查看Vary:User-Agent
器。有关更多信息,请参阅基于设备类型配置缓存。 -
如果您将 Origin 配置为在
Vary
标题Cookie
中 CloudFront 包含Accept-Encoding
或,则会在对查看者的响应中包含这些值。 -
如果您配置 CloudFront 为将标头转发到您的来源,并且将源配置为将标头名称返回到
Vary
标题 CloudFront 中(例如Vary:Accept-Charset,Accept-Language
),则将包含这些值的Vary
标头 CloudFront 返回给查看者。 -
有关如何 CloudFront 处理
Vary
标题*
中值的信息,请参见内容协商。 -
如果您将 Origin 配置为在
Vary
标题中包含任何其他值,则会在将响应返回给查看者之前 CloudFront 删除这些值。
-
-
Via
— 在对查看者的响应中将值 CloudFront 设置为以下值:Via:
http-version
alphanumeric-string
.cloudfront.net (CloudFront)
例如,如果客户端通过 HTTP/1.1 发出请求,该值类似于如下所示:
Via: 1.1 1026589cc7887e7a0dc7827b4example.cloudfront.net (CloudFront)
最大可缓存文件大小
保存在缓 CloudFront 存中的响应正文的最大大小为 50 GB。这包括未指定 Content-Length
标头值的分块传输响应。
您可以使用 CloudFront 缓存大于此大小的对象,方法是使用范围请求按每个 50 GB 或更小的分段请求对象。 CloudFront缓存这些部分,因为每个部分的大小都不超过 50 GB。查看器检索完对象的所有段后,可以重建更大的原始对象。有关更多信息,请参阅 使用范围请求缓存大型对象。
源不可用
如果您的源服务器不可用,并且 CloudFront 收到对位于边缘缓存中但已过期的对象的请求(例如,因为Cache-Control max-age
指令中指定的时间段已过),则 CloudFront 要么提供该对象的过期版本,要么提供自定义错误页面。有关配置自定义错误页面时 CloudFront 行为的更多信息,请参阅配置自定义错误页面后如何 CloudFront 处理错误。
在某些情况下,很少被请求的对象会被逐出,并且在边缘缓存中不再可用。 CloudFront 无法为已被驱逐的物体提供服务。
重新导向
如果更改对象在源服务器上的位置,您可以配置 Web 服务器以重定向请求到新位置。配置重定向后,当查看者第一次提交对象请求时,Fr CloudFront ont 会将请求发送到源,源以重定向进行响应(例如,302 Moved
Temporarily
)。 CloudFront 缓存重定向并将其返回给查看者。 CloudFront 不遵循重定向。
您可以配置 Web 服务器以将请求重新导向到以下位置之一:
-
对象在源服务器上的新 URL。当观看者跟随重定向到新 URL 时,查看者会绕过 CloudFront 并直接转到原点。因此,建议您不要将请求重定向到对象在源上的新 URL。
-
对象的新 CloudFront URL。当查看者提交包含新 CloudFront URL 的请求时, CloudFront 会从您的源站上的新位置获取对象,将其缓存在边缘位置,然后将对象返回给查看者。对象随后的请求将由边缘站点提供。这避免了查看器从源请求对象相关的延迟和负载。但是,对象的每个新请求将产生两个 CloudFront 请求的费用。
Transfer-Encoding
标头
CloudFront 仅支持Transfer-Encoding
标题的chunked
值。如果您的源返 CloudFront 回Transfer-Encoding:
chunked
,则在边缘位置接收对象时将对象返回给客户端,并以分块格式缓存该对象以供后续请求使用。
如果查看者发出Range GET
请求并且源返回Transfer-Encoding: chunked
,则将整个对象 CloudFront 返回给查看者,而不是请求的范围。
如果无法预先确定响应的内容长度,建议您使用分块编码。有关更多信息,请参阅 中断的 TCP 连接。