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

根据 Cookie 缓存内容

对于 Web 分配,默认情况下 CloudFront 在边缘站点中缓存对象时不考虑 Cookie。如果源返回两个对象,并且这两个对象仅 Set-Cookie 标头值不同,则 CloudFront 仅缓存一个对象版本。(对于 RTMP 分配,您无法配置 CloudFront 以处理 Cookie,并且 CloudFront 不在边缘缓存中缓存 Cookie。)

重要

Amazon S3 和一些 HTTP 服务器不处理 Cookie。切勿配置 CloudFront 缓存行为以将 Cookie 转发到不能处理 Cookie 的源,或者您会对缓存能力产生不利影响,从而对性能产生不利影响。有关缓存行为的更多信息,请参阅缓存行为设置

您可以配置 CloudFront 以将查看器请求中的部分或所有 Cookie 转发到源,以及根据查看器请求中的 Cookie 值缓存单独的对象版本。CloudFront 在查看器请求中使用 Cookie 以唯一地标识缓存中的对象。

例如,假设 locations.html 的请求包含 country Cookie,其值为 ukfr。在将 CloudFront 配置为根据 country Cookie 的值缓存对象时,CloudFront 将 locations.html 请求转发到源并包括 country Cookie 和 Cookie 值。源返回 locations.html,并且 CloudFront 为具有 country Cookie 值 uk 的请求缓存对象一次,为具有 Cookie 值 fr 的请求缓存一次。

注意

如果配置 CloudFront 以将 Cookie 转发到源,则 CloudFront 根据 Cookie 值进行缓存。即使源忽略请求中的 Cookie 值,并始终将相同的 locations.html 版本返回到 CloudFront(在上一示例中)也会如此。因此,CloudFront 为相同的对象转发更多的请求到源,这会降低性能并增加源服务器的负载。如果源服务器不根据给定 Cookie 的值改变其响应,我们建议您不要将 CloudFront 配置为将此 Cookie 转发到源。

可以在 Web 分配中配置每个缓存行为,以执行以下操作之一:

  • 将所有 Cookie 转发到源 – CloudFront 将查看器请求转发到源,包括所有 Cookie。当源返回响应时,CloudFront 缓存响应以及查看器请求中的 Cookie 和 Cookie 值。(如果源返回的 Cookie 没有位于查看器请求中,则 CloudFront 不会缓存它们。)CloudFront 向查看器返回请求的对象以及所有 Cookie 和 Cookie 值,包括没有位于查看器请求中的 Cookie。

  • 转发您指定的 Cookie 白名单 – CloudFront 在将请求转发到源之前,删除任何没有位于白名单上的 Cookie。CloudFront 缓存来自源的响应以及指定的 Cookie 和 Cookie 值。(如果源同时返回位于白名单上的 Cookie 和没有位于白名单上的 Cookie,则 CloudFront 仅缓存白名单上的 Cookie。)CloudFront 还会将对象返回到查看器,包括指定的 Cookie 和 Cookie 值。如果来自源的响应包括不在白名单上的 Cookie,CloudFront 也会将这些 Cookie 返回到查看器。

    有关在 Cookie 名称中指定通配符的信息,请参阅白名单 Cookie

    有关您可以为每个缓存行为列入白名单的 Cookie 名称的当前数量限制或要请求提高限制,请参阅有关白名单查询字符串的限制 (仅限 Web 分配)

  • 不将 Cookie 转发到源 – CloudFront 不根据 Cookie 值缓存您的对象。此外,CloudFront 还会从转发到源的请求中删除 Cookie 标头,并从返回到查看器的响应中删除 Set-Cookie 标头。

请注意以下有关指定要转发的 Cookie 的信息:

访问日志

如果将 CloudFront 配置为记录请求和 Cookie,则 CloudFront 记录所有 Cookie 以及所有 Cookie 属性,即使将 CloudFront 配置为不将 Cookie 转发到源,或者 CloudFront 配置为仅转发指定的 Cookie 列表。有关 CloudFront 日志记录的更多信息,请参阅 配置和使用访问日志

区分大小写

Cookie 的名称和值都要区分大小写。例如,如果同一对象的两个 Cookie 是相同的,CloudFront 将缓存对象两次。

CloudFront 排序 Cookie

CloudFront 在转发请求到源之前以自然顺序按 Cookie 名称对 Cookie 进行排序。

If-Modified-Since 和 If-None-Match

If-Modified-SinceIf-None-Match 条件请求不受支持。

必需的标准名称/值对格式

CloudFront 仅在值遵循标准名称/值对格式时转发 cookie 标头,例如:"Cookie: key=value; sample=cookie"

暂停根据 Cookie 进行缓存

如果您希望 CloudFront 暂时停止缓存 Cookie 和 Cookie 属性,请配置源服务器以将以下标头添加到 CloudFront 的响应中:

no-cache="Set-Cookie"

Cookie 名称的总长度

您配置 CloudFront 转发到源的所有 Cookie 名称的总字节数不能超过:

512 – (the number of cookies that you're forwarding)

例如,如果您将 CloudFront 配置为将 10 个 Cookie 转发到源,则 10 个 Cookie 的名称组合长度不能超过 502 个字节 (512 - 10)。如果您将 CloudFront 配置为将所有 Cookie 转发到源,Cookie 名称的长度没有关系。

有关使用 CloudFront 控制台更新分配以使 CloudFront 将 Cookie 转发到源的信息,请参阅更新分配。有关使用 CloudFront API 更新分配的信息,请参阅 Amazon CloudFront API Reference 中的 PUT 分配配置