

# 创建响应标头策略
<a name="creating-response-headers-policies"></a>

可以使用响应标头策略指定 Amazon CloudFront 在 HTTP 响应中添加或删除的 HTTP 标头。有关响应标头策略以及使用它们的原因的更多信息，请参阅[使用策略在 CloudFront 响应中添加或删除 HTTP 标头](modifying-response-headers.md)。

您可以在 CloudFront 控制台中创建响应标头策略。或者，您可以使用 AWS CloudFormation、AWS Command Line Interface（AWS CLI）或 CloudFront API 创建一个标头。创建响应标头策略后，将它附加到 CloudFront 分配中的一个或多个缓存行为。

在创建自定义响应标头策略之前，检查是否有某个[托管式响应标头策略](using-managed-response-headers-policies.md)适合您的使用案例。如果有，则可以将它附加到缓存行为。这样，您就不需要创建或管理自己的响应标头策略。

------
#### [ Console ]

**创建响应标头策略（控制台）**

1. 登录到AWS 管理控制台，打开 CloudFront 控制台（地址为 [https://console.aws.amazon.com/cloudfront/v4/home#/policies/responseHeaders](https://console.aws.amazon.com/cloudfront/v4/home#/policies/responseHeaders)）的 **Policies**（策略）页面，转到 **Response headers**（响应标头）选项卡。

1. 选择 **Create response headers policy**（创建响应标头策略）。

1. 在 **Create response headers policy**（创建响应标头策略）表单中，执行以下操作：

   1. 在 **Details**（详细信息）面板中，输入响应标头策略的 **Name**（名称）和（可选）解释策略用途的 **Description**（描述）。

   1. 在 **Cross-origin resource sharing (CORS)** [跨源资源共享（CORS）]面板中，选择 **Configure CORS**（配置 CORS）切换按钮并配置要添加到策略的任何 CORS 标头。如果您希望配置的标头覆盖 CloudFront 从源接收的标头，请选中 **Origin override**（源覆盖）复选框。

      有关 CORS 标头设置的更多信息，请参阅[CORS 标头](understanding-response-headers-policies.md#understanding-response-headers-policies-cors)。

   1. 在 **Security headers**（安全标头）面板中，选择切换按钮并配置要添加到策略的每个安全标头。

      有关安全标头设置的更多信息，请参阅[安全标头](understanding-response-headers-policies.md#understanding-response-headers-policies-security)。

   1. 在 **Custom headers**（自定义标头）面板中，添加要包含在策略中的任何自定义标头。

      有关自定义标头设置的更多信息，请参阅[自定义标头](understanding-response-headers-policies.md#understanding-response-headers-policies-custom)。

   1. 在 **Remove headers**（删除标头）面板中，添加您希望 CloudFront 从源响应中删除的且不包含在 CloudFront 发送给查看器的响应中的所有标头名称。

      有关删除标头设置的更多信息，请参阅[删除标头](understanding-response-headers-policies.md#understanding-response-headers-policies-remove-headers)。

   1. 在 **Server-Timing header**（Server-Timing 标头）面板中，选择 **Enable**（启用）开关并输入采样率（0 到 100（含）之间的数字）。

      有关 `Server-Timing` 标头的更多信息，请参阅[Server-Timing 标头](understanding-response-headers-policies.md#server-timing-header)。

1. 选择 **Create**（创建）以创建策略。

创建响应标头策略后，您可以将它附加到 CloudFront 分配中的某个缓存行为。

**将响应标头策略附加到现有分配（控制台）**

1. 在 CloudFront 控制台中打开 **Distributions (分配)** 页面，网址为 [https://console.aws.amazon.com/cloudfront/v4/home#/distributions](https://console.aws.amazon.com/cloudfront/v4/home#/distributions)。

1. 选择要更新的分配，然后选择**行为**选项卡。

1. 选择要更新的缓存行为，然后选择 **Edit**（编辑）。

   或者，要创建新的缓存行为，请选择 **Create behavior**(创建行为)。

1. 对于 **Response headers policy**（响应标头策略），选择要添加到缓存行为的策略。

1. 选择 **Save changes**（保存更改）以更新缓存行为。如果要创建新的缓存行为，请选择 **Create behavior**（创建行为）。

**将响应标头策略附加到新的分配（控制台）**

1. 通过 打开 CloudFront 控制台[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)

1. 选择 **Create distribution**（创建分配）。

1. 对于 **Response headers policy**（响应标头策略），选择要添加到缓存行为的策略。

1. 选择分配的其他设置。有关更多信息，请参阅 [所有分配设置参考](distribution-web-values-specify.md)。

1. 选择 **Create distribution**（创建分配）以创建分配。

------
#### [ CloudFormation ]

要使用 CloudFormation 创建响应标头策略，请使用 `AWS::CloudFront::ResponseHeadersPolicy` 资源类型。以下示例显示了 YAML 格式的 CloudFormation 模板语法，用于创建响应标头策略。

```
Type: AWS::CloudFront::ResponseHeadersPolicy
Properties: 
  ResponseHeadersPolicyConfig: 
    Name: EXAMPLE-Response-Headers-Policy
    Comment: Example response headers policy for the documentation
    CorsConfig: 
      AccessControlAllowCredentials: false
      AccessControlAllowHeaders: 
        Items: 
          - '*'
      AccessControlAllowMethods: 
        Items: 
          - GET
          - OPTIONS
      AccessControlAllowOrigins: 
        Items: 
          - https://example.com
          - https://docs.example.com
      AccessControlExposeHeaders: 
        Items: 
          - '*'
      AccessControlMaxAgeSec: 600
      OriginOverride: false
    CustomHeadersConfig: 
      Items: 
        - Header: Example-Custom-Header-1
          Value: value-1
          Override: true
        - Header: Example-Custom-Header-2
          Value: value-2
          Override: true
    SecurityHeadersConfig: 
      ContentSecurityPolicy: 
        ContentSecurityPolicy: default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'; frame-ancestors 'none'
        Override: false
      ContentTypeOptions: # You don't need to specify a value for 'X-Content-Type-Options'.
                          # Simply including it in the template sets its value to 'nosniff'.
        Override: false
      FrameOptions: 
        FrameOption: DENY
        Override: false
      ReferrerPolicy: 
        ReferrerPolicy: same-origin
        Override: false
      StrictTransportSecurity: 
        AccessControlMaxAgeSec: 63072000
        IncludeSubdomains: true
        Preload: true
        Override: false
      XSSProtection: 
        ModeBlock: true # You can set ModeBlock to 'true' OR set a value for ReportUri, but not both
        Protection: true
        Override: false
    ServerTimingHeadersConfig:
      Enabled: true
      SamplingRate: 50
    RemoveHeadersConfig:
      Items:
        - Header: Vary
        - Header: X-Powered-By
```

有关更多信息，请参阅《AWS CloudFormation 用户指南》**中的 [AWS::CloudFront::ResponseHeadersPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-responseheaderspolicy.html)。

------
#### [ CLI ]

要使用 AWS Command Line Interface（AWS CLI）创建响应标头策略，请使用 **aws cloudfront create-response-headers-policy** 命令。您可以使用输入文件来提供命令的输入参数，而不是将每个单独的参数指定为命令行输入。

**创建响应标头策略（通过 CLI 并使用输入文件）**

1. 使用以下命令创建名为 `response-headers-policy.yaml` 的文件。此文件包含 **create-response-headers-policy** 命令的所有输入参数。

   ```
   aws cloudfront create-response-headers-policy --generate-cli-skeleton yaml-input > response-headers-policy.yaml
   ```

1. 打开刚创建的 `response-headers-policy.yaml` 文件。编辑文件以指定策略名称和所需的响应标头策略配置，然后保存文件。

   有关响应标头策略设置的更多信息，请参阅[了解响应标头策略](understanding-response-headers-policies.md)。

1. 使用以下命令创建响应标头策略。您创建的策略使用来自 `response-headers-policy.yaml` 文件的输出参数。

   ```
   aws cloudfront create-response-headers-policy --cli-input-yaml file://response-headers-policy.yaml
   ```

   记下命令输出中的 `Id` 值。这是响应标头策略 ID。您需要它才能将策略附加到 CloudFront 分配的缓存行为。

**将响应标头策略附加到现有分配（通过 CLI 并使用输入文件）**

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

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

1. 打开刚创建的名为 `dist-config.yaml` 的文件。编辑此文件，对缓存行为进行以下更改以使它使用响应标头策略。
   + 在缓存行为中，添加名为 `ResponseHeadersPolicyId` 的字段。对于字段的值，请使用创建策略后记下的响应标头策略 ID。
   + 将 `ETag` 字段重命名为 `IfMatch`，但不更改字段的值。

   完成后保存该文件。

1. 使用以下命令将分配更新为使用响应标头策略。将 *distribution\$1ID* 替换为分配 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
   ```

1. 打开刚创建的 `distribution.yaml` 文件。在默认缓存行为中，在 `ResponseHeadersPolicyId` 字段中输入创建策略后记下的响应标头策略 ID。继续编辑该文件以指定所需的分配设置，然后在完成后保存该文件。

   有关分配设置的更多信息，请参阅[所有分配设置参考](distribution-web-values-specify.md)。

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

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

------
#### [ API ]

要使用 CloudFront API 创建响应标头策略，请使用 [CreateResponseHeadersPolicy](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateResponseHeadersPolicy.html)。有关您在此 API 调用中指定的字段的更多信息，请参阅[了解响应标头策略](understanding-response-headers-policies.md)以及有关 AWS SDK 或其他 API 客户端的 API 参考文档。

创建响应标头策略后，可以使用下面的任何一个 API 调用将其附加到缓存行为：
+ 要将该配置附加到现有分配中的缓存行为，请使用 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)。
+ 要将该配置附加到新分配中的缓存行为，请使用 [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html)。

对于这两个 API 调用，请在缓存行为内的 `ResponseHeadersPolicyId` 字段中提供响应标头策略 ID。有关您在这些 API 调用中指定的其他字段的更多信息，请参阅 [所有分配设置参考](distribution-web-values-specify.md) 以及有关 AWS SDK 或其他 API 客户端的 API 参考文档。

------