控制源请求 - Amazon CloudFront
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

控制源请求

当发送到 CloudFront 的查看器请求导致缓存未命中(请求的对象未在边缘站点缓存)时,CloudFront 会向源发送请求以检索对象。这称为源请求。源请求始终包含来自查看器请求的以下信息:

  • URL 路径(仅路径,不包含 URL 查询字符串或域名)

  • 请求正文(如果有)

  • CloudFront 在每个源请求中自动包含的 HTTP 标头,包括 HostUser-AgentX-Amz-Cf-Id

默认情况下,查看器请求中的其他信息(如 URL 查询字符串、HTTP 标头和 Cookie)不包含在源请求中。但是,您可能希望在源处接收其他一些此类信息,例如收集数据以进行分析或遥测。您可以使用源请求策略 控制源请求中包含的信息。

源请求策略与控制缓存键的缓存策略是分开的。通过这种分离,您能够在源处接收其他信息,并保持良好的缓存命中率(导致缓存命中的查看器请求比例)。您可以通过单独控制哪些信息包含在源请求中(使用源请求策略)以及哪些信息包含在缓存键中(使用缓存策略)来做到这一点。

虽然这两种策略是分开的,但它们却相关联。您在缓存键中包含的所有 URL 查询字符串、HTTP 标头和 Cookie(使用缓存策略)都将自动包含在源请求中。使用源请求策略指定要包含在源请求中但 包含在缓存键中的信息。与缓存策略一样,您可以将源请求策略附加到 CloudFront 分配中的一个或多个缓存行为。

还可以使用源请求策略将其他 HTTP 标头添加到查看器请求中未包含的源请求。这些附加标头是 CloudFront 在发送源请求之前添加的,而标头值是根据查看器请求自动确定的。有关更多信息,请参阅 使用 CloudFront HTTP 标头

了解源请求策略

CloudFront 为常见使用案例提供了一些预定义的源请求策略(称为托管策略)。您可以使用这些托管策略,也可以创建特定于您的需求的源请求策略。有关托管策略的更多信息,请参阅使用托管源请求策略

源请求策略包含以下设置,这些设置的分类如下:策略信息源请求设置

策略信息

名称

用于标识源请求策略的名称。在控制台中,可以使用名称将源请求策略附加到缓存行为。

注释

描述源请求策略的注释。该项为可选项。

源请求设置

源请求设置指定查看器请求中包含的值,这些值包含在 CloudFront 发送到源的请求(称为源请求)中。这些值可以包括 URL 查询字符串、HTTP 标头和 Cookie。您指定的值包含在源请求中,但不会包含在缓存键中。有关控制缓存键的信息,请参阅控制缓存键

查询字符串

CloudFront 包含在源请求中的查看器请求中的 URL 查询字符串。对于查询字符串,可以选择下列设置之一:

  • – 查看器请求中的查询字符串 会包含在源请求中。

  • 全部 – 查看器请求中的所有查询字符串都包含在源请求中。

  • 白名单 – 您可以指定查看器请求中的哪些查询字符串包含在源请求中。

在使用白名单设置时,可以按查询字符串的名称(而不是值)指定它们。例如,请考虑以下 URL 路径:

/content/stories/example-story.html?split-pages=false

在此情况下,您可以将查询字符串指定为 split-pages,而不是指定为 split-pages=false。但是,CloudFront 会将完整的查询字符串,(包括其值)包含在源请求中。

标头

CloudFront 包含在源请求中的查看器请求中的 HTTP 标头。对于标头,您可以选择下列设置之一:

  • – 查看器请求中的 HTTP 标头 会包含在源请求中。

  • 所有查看器标头 – 查看器请求中的所有 HTTP 标头都包含在源请求中。

  • 白名单 – 您可以指定哪些 HTTP 标头包含在源请求中。

  • 所有查看器标头和列入白名单的 CloudFront 标头 – 查看器请求中的所有 CloudFront-* 标头都包含在源请求中。此外,您可以指定要添加到源请求中的 CloudFront 标头。有关 CloudFront 标头的更多信息,请参阅使用 CloudFront HTTP 标头

在使用白名单所有查看器标头和列入白名单的 CloudFront-* 标头设置时,可以按 HTTP 标头的名称(而不是值)指定它们。例如,请考虑以下 HTTP 标头:

Accept-Language: en-US,en;q=0.5

在此情况下,您可以将标头指定为 Accept-Language,而不是指定为 Accept-Language: en-US,en;q=0.5。但是,CloudFront 会将完整标头(包括其值)包含在源请求中。

Cookie

CloudFront 包含在源请求中的查看器请求中的 Cookie。对于 Cookie,您可以选择下列设置之一:

  • – 查看器请求中的 Cookie 会包含在源请求中。

  • 全部 – 查看器请求中的所有 Cookie 都包含在源请求中。

  • 白名单 – 您可以指定查看器请求中的哪些 Cookie 包含在源请求中。

在使用白名单设置时,可以按 Cookie 的名称(而不是值)指定它们。例如,请考虑以下 Cookie 标头:

Cookie: session_ID=abcd1234

在此情况下,您可以将 Cookie 指定为 session_ID,而不是指定为 session_ID=abcd1234。但是,CloudFront 会将完整 Cookie(包括其值)包含在源请求中。

创建源请求策略

您可以使用源请求策略控制包含在 CloudFront 发送到源的请求中的值(URL 查询字符串、HTTP 标头和 Cookie)。您可以使用 AWS 命令行界面 (AWS CLI) 或 CloudFront API 在 CloudFront 控制台中创建源请求策略。

创建源请求策略后,可以将它附加到 CloudFront 分配中的一个或多个缓存行为。

源请求策略不是必需的。如果缓存行为未附加源请求策略,则源请求只会包含缓存策略中指定的所有值。

注意

要使用源请求策略,缓存行为还必须使用缓存策略。如果没有缓存策略,则无法在缓存行为中使用源请求策略。

创建源请求策略(控制台)

  1. 登录 AWS 管理控制台,然后在 CloudFront 控制台 (https://console.amazonaws.cn/cloudfront/v2/home?#/policies) 中打开策略页面。

  2. 选择源请求策略,然后选择创建源请求策略

  3. 为此源请求策略选择所需的设置。有关更多信息,请参阅 了解源请求策略

  4. 完成后,选择创建源请求策略

创建源请求策略后,可以将它附加到缓存行为。

将源请求策略附加到现有分配(控制台)

  1. 在 CloudFront 控制台中打开分配页面,网址为 https://console.amazonaws.cn/cloudfront/home#distributions:

  2. 选择要更新的分配,然后选择行为选项卡。

  3. 选择要更新的缓存行为,然后选择编辑

    或者,要创建新的缓存行为,请选择创建行为

  4. 对于缓存和源请求设置,请确保选择使用缓存策略和源请求策略

  5. 对于源请求策略,请选择要附加到此缓存行为的源请求策略。

  6. 在页面底部选择是,编辑

将源请求策略附加到新分配(控制台)

  1. 通过 https://console.amazonaws.cn/cloudfront/home 打开 CloudFront 控制台。

  2. 选择创建分配,然后为 Web 选择开始

  3. 对于缓存和源请求设置,请确保选择使用缓存策略和源请求策略

  4. 对于源请求策略,请选择要附加到此分配的默认缓存行为的源请求策略。

  5. 为源、默认缓存行为和分配选择所需的设置。有关更多信息,请参阅 您创建或更新分配时指定的值

  6. 完成后,选择创建分配

要使用 AWS 命令行界面 (AWS CLI) 创建源请求策略,请使用 aws cloudfront create-origin-request-policy 命令。您可以使用输入文件来提供命令的输入参数,而不是将每个单独的参数指定为命令行输入。

创建源请求策略(带输入文件的 CLI)

  1. 使用以下命令创建名为 origin-request-policy.yaml 的文件,其中包含 create-origin-request-policy 命令的所有输入参数。

    aws cloudfront create-origin-request-policy --generate-cli-skeleton yaml-input > origin-request-policy.yaml
    注意

    yaml-input 选项仅适用于版本 2 的 AWS CLI。利用版本 1 的 AWS CLI,您可以生成 JSON 格式的输入文件。有关更多信息,请参阅《AWS 命令行界面用户指南》中的从 JSON 或 YAML 输入文件生成 AWS CLI 骨架和输入参数

  2. 打开刚创建的名为 origin-request-policy.yaml 的文件。编辑该文件以指定所需的源请求策略设置,然后保存该文件。您可以从该文件中删除可选字段,但不要删除必填字段。

    有关源请求策略设置的更多信息,请参阅了解源请求策略

  3. 使用以下命令通过 origin-request-policy.yaml 文件中的输入参数创建源请求策略。

    aws cloudfront create-origin-request-policy --cli-input-yaml file://origin-request-policy.yaml

    记下命令输出中的 Id 值。这是源请求策略 ID,您需要它才能将源请求策略附加到 CloudFront 分配的缓存行为。

将源请求策略附加到现有分配(带输入文件的 CLI)

  1. 使用以下命令保存要更新的 CloudFront 分配的分配配置。将 distribution_ID 替换为分配的 ID。

    aws cloudfront get-distribution-config --id distribution_ID --output yaml > dist-config.yaml
    注意

    --output yaml 选项仅适用于版本 2 的 AWS CLI。利用版本 1 的 AWS CLI,您可以生成 JSON 格式的输出。有关更多信息,请参阅《AWS 命令行界面用户指南》中的控制 AWS CLI 的命令输出

  2. 打开刚创建的名为 dist-config.yaml 的文件。编辑该文件,对要更新的每个缓存行为进行以下更改以使用源请求策略。

    • 在缓存行为中,添加名为 OriginRequestPolicyId 的字段。对于字段的值,请使用创建策略后记下的源请求策略 ID。

    • ETag 字段重命名为 IfMatch,但不更改字段的值。

    完成后保存该文件。

  3. 使用以下命令更新分配以使用源请求策略。将 distribution_ID 替换为分配的 ID。

    aws cloudfront update-distribution --id distribution_ID --cli-input-yaml file://dist-config.yaml

将缓存策略附加到新分配(带输入文件的 CLI)

  1. 使用以下命令创建名为 distribution.yaml 的文件,其中包含 create-distribution 命令的所有输入参数。

    aws cloudfront create-distribution --generate-cli-skeleton yaml-input > distribution.yaml
    注意

    yaml-input 选项仅适用于版本 2 的 AWS CLI。利用版本 1 的 AWS CLI,您可以生成 JSON 格式的输入文件。有关更多信息,请参阅《AWS 命令行界面用户指南》中的从 JSON 或 YAML 输入文件生成 AWS CLI 骨架和输入参数

  2. 打开刚创建的名为 distribution.yaml 的文件。在默认缓存行为中,在 OriginRequestPolicyId 字段中输入创建策略后记下的源请求策略 ID。继续编辑该文件以指定所需的分配设置,然后在完成后保存该文件。

    有关分配设置的更多信息,请参阅您创建或更新分配时指定的值

  3. 使用以下命令通过 distribution.yaml 文件中的输入参数创建分配。

    aws cloudfront create-distribution --cli-input-yaml file://distribution.yaml

要使用 CloudFront API 创建源请求策略,请使用 CreateOriginRequestPolicy。有关您在此 API 调用中指定的字段的更多信息,请参阅了解源请求策略以及 AWS 软件开发工具包或其他 API 客户端的 API 参考文档。

创建源请求策略后,可以使用下列 API 调用之一将该策略附加到缓存行为:

对于这两个 API 调用,请在缓存行为中的 OriginRequestPolicyId 字段中提供源请求策略的 ID。有关您在这些 API 调用中指定的其他字段的更多信息,请参阅您创建或更新分配时指定的值以及 AWS 软件开发工具包或其他 API 客户端的 API 参考文档。