

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

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

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

# 向 Amazon WAF 或 Shield Advanced 发出HTTPS请求
<a name="waf-api-making-requests"></a>

Amazon WAF 而且 Shield Advanced 请求是 HTTPS 请求，如 [RFC 26](https://datatracker.ietf.org/doc/html/rfc2616) 16 所定义。与任何 HTTP 请求一样，对 Amazon WAF 或 Shield Advanced 的请求包含请求方法、URI、请求标头和请求正文。响应包含 HTTP 状态码、响应标题，有时候包含响应主体。

## 请求 URI
<a name="waf-api-making-requests-uri"></a>

请求 URI 始终是一个正斜杠 `/`。

## HTTP 标头
<a name="waf-api-making-requests-header"></a>

Amazon WAF 而且 Shield Advanced 要求在 HTTP 请求的标头中包含以下信息：

**Host（必需）**  
指定资源创建位置的终端节点。有关端点的信息，请参阅[Amazon 服务端点](https://docs.amazonaws.cn/general/latest/gr/rande.html)。例如， CloudFront 分配的标`Host`题 Amazon WAF 的值为`waf.amazonaws.com:443`。

**x-amz-date 或日期（必填）**  
用于创建 `Authorization` 标头中包含的签名的日期。采用 ISO 8601 标准格式以 UTC 时间指定日期，如以下示例所示：  

```
x-amz-date: 20151007T174952Z
```
必须包含 `x-amz-date` 或 `Date`。(有些 HTTP 客户端库不允许设置 `Date` 标头)。如果存在`x-amz-date`标头，则在对请求进行身份验证时 Amazon WAF 会忽略任何`Date`标头。  
时间戳必须在收到请求的 Amazon 系统时间的 15 分钟以内。如果不在此时间范围内，请求将失败，并出现 `RequestExpired` 错误代码，以防止其他人重放您的请求。

**Authorization（必需）**  
请求身份验证所需的信息。有关构建此标头的更多信息，请参阅 [对请求进行身份验证](authenticating-requests.md)。

**X-Amz-Target （必填）**  
`AWSWAF_` 或 `AWSShield_`、无标点的 API 版本、句点 (`.`) 以及操作名称的联接，例如：  
`AWSWAF_20150824.CreateWebACL`

**Content-Type (条件性)**  
指定内容类型为 JSON，并指定 JSON 的版本，如以下示例所示：  

```
Content-Type: application/x-amz-json-1.1
```
条件：`POST` 请求时为必填项。

**Content-Length（条件性）**  
符合 RFC 2616 的消息的长度（不带标头）。  
条件：必需，如果请求主体本身包含信息（大多数工具包自动添加此标题）。

以下示例为在 Amazon WAF中创建保护包（web ACL）所用 HTTP 请求的标头：

```
POST / HTTP/1.1
Host: waf.amazonaws.com:443
X-Amz-Date: 20151007T174952Z
Authorization: AWS4-HMAC-SHA256 
               Credential=AccessKeyID/20151007/us-east-2/waf/aws4_request,
               SignedHeaders=host;x-amz-date;x-amz-target,
               Signature=145b1567ab3c50d929412f28f52c45dbf1e63ec5c66023d232a539a4afd11fd9
X-Amz-Target: AWSWAF_20150824.CreateWebACL
Accept: */*
Content-Type: application/x-amz-json-1.1; charset=UTF-8
Content-Length: 231
Connection: Keep-Alive
```

## HTTP 请求正文
<a name="waf-api-making-requests-body"></a>

许多 Amazon WAF and Shield Advanced API 操作都要求您在请求正文中包含 JSON 格式的数据。

以下示例请求使用一个简单的 JSON 语句来更新 `IPSet`，以包含 IP 地址 192.0.2.44 (用 CIDR 表示法记为 192.0.2.44/32)：

```
POST / HTTP/1.1
Host: waf.amazonaws.com:443
X-Amz-Date: 20151007T174952Z
Authorization: AWS4-HMAC-SHA256 
               Credential=AccessKeyID/20151007/us-east-2/waf/aws4_request,
               SignedHeaders=host;x-amz-date;x-amz-target,
               Signature=145b1567ab3c50d929412f28f52c45dbf1e63ec5c66023d232a539a4afd11fd9
X-Amz-Target: AWSWAF_20150824.UpdateIPSet
Accept: */*
Content-Type: application/x-amz-json-1.1; charset=UTF-8
Content-Length: 283
Connection: Keep-Alive

{
   "ChangeToken": "d4c4f53b-9c7e-47ce-9140-0ee5ffffffff",
   "IPSetId": "69d4d072-170c-463d-ab82-0643ffffffff",
   "Updates": [
      {
         "Action": "INSERT",
         "IPSetDescriptor": {
            "Type": "IPV4",
            "Value": "192.0.2.44/32"
         }
      }
   ]
}
```