

**引入全新的主机体验 Amazon WAF**

现在，您可以使用更新的体验访问控制台中任意位置的 Amazon WAF 功能。有关更多详细信息，请参阅[使用控制台](https://docs.amazonaws.cn/waf/latest/developerguide/working-with-console.html)。

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

# 为非阻止操作插入自定义请求标头
<a name="customizing-the-incoming-request"></a>

本节介绍当规则操作未阻止请求时， Amazon WAF 如何指示将自定义标头插入到原始 HTTP 请求中。使用此选项，您只需添加到请求中。您不能修改或替换原始请求的任何部分。插入自定义标头的使用案例包括向下游应用程序发出信号，要求其根据插入的标头以不同方式处理该请求，以及标记该请求以进行分析。

**重要**  
此选项适用于规则操作 Allow、Count、CAPTCHA 和 Challenge，以及设置为 Allow 的保护包（web ACL）默认操作。有关规则操作的更多信息，请参阅 [在中使用规则操作 Amazon WAF](waf-rule-action.md)。有关默认保护包（web ACL）操作的更多信息，请参阅 [在中设置保护包 (Web ACL) 的默认操作 Amazon WAF](web-acl-default-action.md)。

## 使用自定义请求标头名称时的注意事项
<a name="using-custom-request-header-names"></a>

**在请求标头中添加了前缀**  
Amazon WAF 为其插入的所有请求标头添加前缀`x-amzn-waf-`，以避免与请求中已有的标头混淆。例如，如果您指定标题名称`sample`，则会 Amazon WAF 插入标题`x-amzn-waf-sample`。

**重要**  
作为安全措施，您可以添加字符串匹配规则，以阻止标头以 `x-amzn-waf-` 开头的请求。这会阻止来自非Amazon WAF 来源的请求，这些请求模仿处理自定义请求标头 Amazon WAF 时插入`x-amzn-waf-`的前缀字符串。

以下示例显示了配置为阻止未插入`x-amzn-waf-`前缀的流量的字符串匹配规则 Amazon WAF：

```
    "Rules": [
        {
          "Name": "CustomHeader",
          "Priority": 0,
          "Statement": {
            "ByteMatchStatement": {
              "SearchString": " x-amzn-waf-",
              "FieldToMatch": {
                "Headers": {
                  "MatchPattern": {
                    "All": {}
                  },
                  "MatchScope": "KEY",
                  "OversizeHandling": "MATCH"
                }
              },
              "TextTransformations": [
                {
                  "Priority": 0,
                  "Type": "NONE"
                }
              ],
              "PositionalConstraint": "STARTS_WITH"
            }
          },
          "Action": {
            "Block": {}
          },
          "VisibilityConfig": {
            "SampledRequestsEnabled": true,
            "CloudWatchMetricsEnabled": true,
            "MetricName": "CustomHeader"
          }
        }
      ]
```

有关使用字符串匹配规则的信息，请参阅 [字符串匹配规则语句](waf-rule-statement-type-string-match.md)。

**同名标头**  
如果请求中已经有 Amazon WAF 正在插入的同名标头，则 Amazon WAF 会覆盖该标头。因此，如果您在多个具有相同名称的规则中定义标头，则检查请求并查找匹配项的最后一条规则将添加其标头，而之前的任何规则都不会添加标头。

## 使用带有非终止规则操作的自定义标头
<a name="custom-request-header-non-terminating-rule-actions"></a>

与Allow操作不同，该Count操作不会停止 Amazon WAF 使用保护包（Web ACL）中的其余规则处理 Web 请求。同样，当CAPTCHA并Challenge确定请求令牌有效时，这些操作不会停止 Amazon WAF 处理 Web 请求。因此，如果采用具有这些操作之一的规则插入自定义标头，后续规则可能也会插入自定义标头。有关规则操作行为的更多信息，请参阅 [在中使用规则操作 Amazon WAF](waf-rule-action.md)。

例如，假设您拥有以下规则，按所示顺序排列优先级：

1. RuleA，其中包含一个 Count 操作和一个名为 `RuleAHeader` 的自定义标头。

1. RuleB，其中包含一个 Allow 操作和一个名为 `RuleBHeader` 的自定义标头。

如果请求同时匹配 ruleA 和 RuleB，则 Amazon WAF 插入标头`x-amzn-waf-RuleAHeader`和`x-amzn-waf-RuleBHeader`，然后将请求转发到受保护的资源。

Amazon WAF 完成对请求的检查后，在 Web 请求中插入自定义标头。因此，如果您将自定义请求处理与将操作设置为 Count 的规则一起使用，则后续规则不会检查您添加的自定义标头。

## 自定义请求处理示例
<a name="example-custom-request-handling"></a>

您可以为规则的操作或保护包（web ACL）的默认操作定义自定义请求处理。下表显示保护包（web ACL）默认操作中添加的用于自定义处理的 JSON。

```
{
 "Name": "SampleWebACL",
 "Scope": "REGIONAL",
 "DefaultAction": {
  "Allow": {
   "CustomRequestHandling": {
    "InsertHeaders": [
     {
      "Name": "fruit",
      "Value": "watermelon"
     },
     {
      "Name": "pie",
      "Value": "apple"
     }
    ]
   }
  }
 },
 "Description": "Sample protection pack (web ACL) with custom request handling configured for default action.",
 "Rules": [],
 "VisibilityConfig": {
  "SampledRequestsEnabled": true,
  "CloudWatchMetricsEnabled": true,
  "MetricName": "SampleWebACL"
 }
}
```