自定义源的请求和响应行为 - Amazon CloudFront
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

自定义源的请求和响应行为

如何 CloudFront 处理请求并将其转发到您的自定义来源

本主题包含有关如何 CloudFront 处理查看者请求以及如何将请求转发到您的自定义来源的信息。

身份验证

对于DELETEGETHEADPATCHPOST、和PUT请求,如果您配置为将Authorization标头转发 CloudFront到您的源,则可以将源服务器配置为请求客户端身份验证。

对于OPTIONS请求,只有在使用以下 CloudFront 设置时,才能将源服务器配置为请求客户端身份验证:

您可以配置 CloudFront 为使用 HTTP 或 HTTPS 将请求转发到您的源;有关更多信息,请参阅将 HTTPS 与 CloudFront

缓存持续时间和最小 TTL

要控制您的对象在将另一个请求 CloudFront 转发到您的源之前在 CloudFront 缓存中停留多长时间,您可以:

  • 配置您的源,以将 Cache-ControlExpires 标题字段添加到每个对象。

  • 在 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.3192.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 的第 8.1 节。您也可以使用 CloudFront 边缘计算函数修改标头。

客户端 SSL 身份验证

CloudFront 不支持使用客户端 SSL 证书进行客户端身份验证。如果源请求客户端证书,则 CloudFront 会丢弃该请求。

压缩

有关更多信息,请参阅 提供压缩文件

有条件请求

当 CloudFront 收到对已从边缘缓存中过期的对象的请求时,它会将请求转发到源,以获取该对象的最新版本,或者从源处获得 CloudFront 边缘缓存已有最新版本的确认。通常,当源最后一次将对象发送到时 CloudFront,它会在响应中包含一个ETagLastModified值、一个值或两个值。在 CloudFront 转发到源的新请求中, CloudFront 添加以下一项或两项:

  • If-MatchIf-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 总是缓存对GETHEAD请求的响应。您也可以配置为缓存 CloudFront 对OPTIONS请求的响应。 CloudFront 不缓存对使用其他方法的请求的响应。

有关如何配置是否让自定义源处理这些方法的信息,请参阅该源的文档。

重要

如果您配置 CloudFront 为接受所有 CloudFront 支持的 HTTP 方法并将其转发到您的源,请将您的源服务器配置为处理所有方法。例如,如果您因为要使用而配置 CloudFront 为接受和转发这些方法POST,则必须将源服务器配置为适当地处理DELETE请求,这样查看者就无法删除您不希望他们删除的资源。有关更多信息,请参阅您的 HTTP 服务器的文档。

HTTP 请求标头和 CloudFront 行为(自定义来源和 Amazon S3 来源)

下表列出了 HTTP 请求标头,您可以将其转发到自定义源和 Amazon S3 源(有例外情况需要注意)。对于每个标头,该表包含有关以下内容的信息:

  • CloudFront 如果您未配置 CloudFront 为将标头转发到您的来源,则会出现行为,这会 CloudFront 导致根据标头值缓存对象。

  • 是否可以配置为 CloudFront 根据该标头的标头值缓存对象。

    您可以配置 CloudFront 为根据DateUser-Agent标头中的值缓存对象,但我们不建议这样做。这些标头有许多可能的值,根据它们的值进行缓存将导致 CloudFront 向您的源转发更多的请求。

有关基于标头值的缓存操作的更多信息,请参阅根据请求标头缓存内容

标头 未配置为根据标头值 CloudFront 进行缓存时的行为 支持基于标头值的缓存操作

其他定义的标头

旧版缓存设置-将标题 CloudFront 转发到您的来源。

Accept

CloudFront 移除标题。

Accept-Charset

CloudFront 移除标题。

Accept-Encoding

如果该值包含gzipbr,则将标准化Accept-Encoding标头 CloudFront 转发到您的来源。

有关更多信息,请参阅 压缩支持提供压缩文件

Accept-Language

CloudFront 移除标题。

Authorization

  • GET和 req HEAD ue CloudFront sts — 在将请求转发到您的源服务器之前删除Authorization标头字段。

  • OPTIONSrequests — 如果您配置为缓存对请求的响应,则在将OPTIONS请求转发 CloudFront 到您的源之前 CloudFront删除Authorization标头字段。

    CloudFront 如果您未配置为缓存 OPTIONS 请求的响应,则会CloudFront 将Authorization标头字段转发到您的来源。

  • DELETEPATCHPOST、和 PUT request CloudFront s — 在将请求转发到您的源服务器之前不会删除标头字段。

Cache-Control

CloudFront 将标题转发到您的来源。

CloudFront-Forwarded-Proto

CloudFront 在将请求转发到您的源站之前不会添加标头。

有关更多信息,请参阅 基于请求的协议配置缓存

CloudFront-Is-Desktop-Viewer

CloudFront 在将请求转发到您的源站之前不会添加标头。

有关更多信息,请参阅 基于设备类型配置缓存

CloudFront-Is-Mobile-Viewer

CloudFront 在将请求转发到您的源站之前不会添加标头。

有关更多信息,请参阅 基于设备类型配置缓存

CloudFront-Is-Tablet-Viewer

CloudFront 在将请求转发到您的源站之前不会添加标头。

有关更多信息,请参阅 基于设备类型配置缓存

CloudFront-Viewer-Country

CloudFront 在将请求转发到您的源站之前不会添加标头。

Connection

CloudFront 在将请求转发到您的源Connection: Keep-Alive之前,将此标头替换为。

Content-Length

CloudFront 将标题转发到您的来源。

Content-MD5

CloudFront 将标题转发到您的来源。

Content-Type

CloudFront 将标题转发到您的来源。

Cookie

如果您配置为 CloudFront 转发 Cookie,它会将标Cookie题字段转发到您的来源。如果不这样做,则 CloudFront 移除标Cookie题字段。有关更多信息,请参阅 根据 Cookie 缓存内容

Date

CloudFront 将标题转发到您的来源。

是,但建议不要这样做

Expect

CloudFront 移除标题。

From

CloudFront 将标题转发到您的来源。

Host

CloudFront 将该值设置为与请求的对象关联的来源的域名。

您无法根据 Amazon S3 的主机标头或 MediaStore来源进行缓存。

是 (自定义)

否(S3 和 MediaStore)

If-Match

CloudFront 将标题转发到您的来源。

If-Modified-Since

CloudFront 将标题转发到您的来源。

If-None-Match

CloudFront 将标题转发到您的来源。

If-Range

CloudFront 将标题转发到您的来源。

If-Unmodified-Since

CloudFront 将标题转发到您的来源。

Max-Forwards

CloudFront 将标题转发到您的来源。

Origin

CloudFront 将标题转发到您的来源。

Pragma

CloudFront 将标题转发到您的来源。

Proxy-Authenticate

CloudFront 移除标题。

Proxy-Authorization

CloudFront 移除标题。

Proxy-Connection

CloudFront 移除标题。

Range

CloudFront 将标题转发到您的来源。有关更多信息,请参阅 如何 CloudFront 处理对象的部分请求(范围 GET)

是 (默认值)

Referer

CloudFront 移除标题。

Request-Range

CloudFront 将标题转发到您的来源。

TE

CloudFront 移除标题。

Trailer

CloudFront 移除标题。

Transfer-Encoding

CloudFront 将标题转发到您的来源。

Upgrade

CloudFront 移除标头,除非您已建立WebSocket 连接。

否( WebSocket 连接除外)

User-Agent

CloudFront 将此标题字段的值替换为Amazon CloudFront。如果 CloudFront 要根据用户使用的设备缓存内容,请参阅基于设备类型配置缓存

是,但建议不要这样做

Via

CloudFront 将标题转发到您的来源。

Warning

CloudFront 将标题转发到您的来源。

X-Amz-Cf-Id

CloudFront 在将请求转发到您的来源之前,将标头添加到查看者请求中。标头值包含一个用于唯一标识请求的加密的字符串。

X-Edge-*

CloudFront 移除所有X-Edge-*标题。

X-Forwarded-For

CloudFront 将标题转发到您的来源。有关更多信息,请参阅 客户端 IP 地址

X-Forwarded-Proto

CloudFront 移除标题。

X-HTTP-Method-Override

CloudFront 移除标题。

X-Real-IP

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 方法:

  • GETHEAD请求 — 如果源站在响应超时期间没有响应或停止响应,则 CloudFront 断开连接。如果指定的源连接尝试次数大于 1,则再次 CloudFront 尝试以获得完整的响应。 CloudFront 最多尝试 3 次,具体取决于源连接尝试次数设置的值。如果源站在最后一次尝试中 CloudFront 没有响应,则在收到有关同一来源的内容的另一个请求之前不会重试。

  • DELETEOPTIONSPATCHPUT、和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: privateCache-Control: no-storeCache-Control: no-cacheCache-Control: max-age=0Cache-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 将这些标头的值设置为truefalse在将请求转发到您的源之前。如果某个设备归入多个类别中,则多个值可能为 true。例如,对于某些平板电脑设备, CloudFront 可以将CloudFront-Is-Mobile-Viewer和同时设置CloudFront-Is-Tablet-Viewertrue。有关配置为基于请求标头 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 会返回错误。

缓存

已取消的请求

如果某个对象不在边缘缓存中,并且如果查看者在从您的源端 CloudFront 获取对象之后但在交付请求的对象之前终止了会话(例如,关闭浏览器),则 CloudFront 不会将该对象缓存到边缘位置。

内容协商

如果您的源在响应Vary:*中返回,并且相应缓存行为的最小 TTL 值为 0, CloudFront 则会缓存该对象,但仍会将对该对象的所有后续请求转发到源,以确认缓存中包含该对象的最新版本。CloudFront 不包含任何条件标题,例如If-None-MatchIf-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-ViewerCloudFront-Is-SmartTV-ViewerCloudFront-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 连接