
# 配置API的响应缓存
您可以通过配置响应缓存策略将后端服务（服务端）返回的应答缓存在API网关中，当客户端发送相同的请求时，网关不用向后端传递请求，直接返回缓存的应答。有效降低后端的负荷，同时减少API调用的延迟。
![](https://support.huaweicloud.com/usermanual-apig/public_sys-resources/note_3.0-zh-cn.png)
- 当使用响应缓存策略时，后端的响应内容会缓存到API网关中，此时API网关不支持缓存数据加密，对于响应中的敏感数据存在安全风险，请谨慎配置策略。
- 策略参数会明文展示，为防止信息泄露，请谨慎配置。
- 如果此策略在当前实例中不支持，请[提交工单](https://support.huaweicloud.com/usermanual-ticket/zh-cn_topic_0127038618.html)升级实例到最新版本。
 
响应缓存策略原理图如下：
![](https://support.huaweicloud.com/usermanual-apig/zh-cn_image_0000001890813809.png "点击放大")
#### 约束与限制
- 同一个环境中，一个API只能被一个响应缓存策略绑定，但一个响应缓存策略可以绑定多个API。
- 响应缓存策略仅支持使用GET、HEAD方法的API。
- 超过1M的响应体不会被缓存。
- 用于后端响应内容的缓存大小为128m。
- API网关遵守后端应答中的Cache-Control头的约定来处理缓存，如果后端不返回Cache-Control头，则默认缓存，使用策略中配置的ttl字段作为缓存超期时间。
- API网关默认不处理客户端的Cache-Control头，可以通过策略中的client_cache_control来进行配置。
- Cache-Control拓展缓存指令不是核心HTTP缓存标准文档的一部分，本策略不支持拓展缓存指令。
  ```
  Cache-control: immutable 
  Cache-control: stale-while-revalidate=<seconds> 
  Cache-control: stale-if-error=<seconds>
  ```
  
- API网关仅支持缓存**Content-Type** 、**Content-Encoding** 、**Content-Language**头，如需要缓存更多的Headers，请在策略的"允许缓存的后端响应头"参数处添加，但是无法添加API网关增加的系统响应头（x-apig-\*，x-request-id等）。
- 策略和API本身相互独立，只有为API绑定策略后，策略才对API生效。为API绑定策略时需指定发布环境，策略只对指定环境上的API生效。
- API的下线操作不影响策略的绑定关系，再次发布后仍然会带有下线前绑定的策略。
- 如果策略与API有绑定关系，则策略无法执行删除操作。
 
#### 创建响应缓存策略
1. 进入[API网关控制台](https://console.huaweicloud.com/apig2/#/overview)页面。
2. 根据实际业务在左侧导航栏上方选择实例。

3. 在左侧导航栏选择"API管理 \> API策略"。
4. 在"策略管理"页面，单击"创建策略"。
5. 在"选择策略类型"弹窗中，选择"插件策略 \> 响应缓存"。
6. 在"创建策略"弹窗中，根据下表参数说明，配置策略信息。 
   表1响应缓存参数说明 
   | 参数         | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   |:---|:---|
   | 策略名称       | 填写策略的名称，根据业务规划自定义。建议您按照一定的命名规则填写策略名称，方便您快速识别和查找。 支持中文、英文、数字、下划线，且只能以英文或中文开头，长度为3\~255个字符。                                                                                                                                                                                                                                                                                                                                                                                                             |
   | 策略类型       | 固定为"响应缓存"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 描述         | 填写策略的描述信息。长度为1\~255个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 策略内容       | 策略的配置内容，支持表单配置和脚本配置两种方式。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | 响应缓存键      | 配置参数作为响应缓存键，用于区分不同的缓存。 - system_params类型：配置不同的网关内置系统参数作为响应缓存键来区分缓存。配置参数请参考[网关内置参数](https://support.huaweicloud.com/usermanual-apig/apig_03_0010.html#apig_03_0010__zh-cn_topic_0000001126143529_li672035111311)。  - parameters类型：配置不同的请求query参数作为响应缓存键来区分缓存。  - headers类型：配置不同的请求头作为响应缓存键来区分缓存。   |
   | HTTP参数     | 根据HTTP响应码和缓存时长来决定是否缓存，以及缓存的有效时间。 如果不配置HTTP参数，那么HTTP响应码默认值为200，取值范围：200\~599。缓存时长默认值为300s，取值范围：1s\~720000s。                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | 缓存策略模式     | 网关通过客户端请求中的**Cache-Control** 请求头来处理缓存，默认拒绝所有客户端带**Cache-Control**头的请求。 - all：允许所有客户端带**Cache-Control**头的请求。  - off：拒绝所有客户端带**Cache-Control**头的请求。  - apps：允许appId（凭据ID）取值在datas列表中的客户端。                                                                                                                       |
   | 允许缓存的后端响应头 | 对于后端的响应Headers，默认仅支持缓存**Content-Type** ，**Content-Encoding** ，**Content-Languag** **e**头。如果需要缓存更多的Headers，请在"允许缓存的后端响应头"处添加，但是无法添加API网关增加的系统响应头（x-apig-\*，x-request-id等）。                                                                                                                                                                                                                                                                                                                                                                                         |
      
   
   
7. 单击"确定"。 
   - 在策略列表中显示已创建的策略，表示策略创建成功。
   
   - 如果您需要复制已创建的策略，请在已创建策略的"操作"列中单击"克隆"配置参数即可。**克隆策略的名称不能与已创建的策略名称重复。**
   
   
   
   
8. 策略创建后，您还需要[为策略绑定API]，才能使策略对API生效。
   
   **策略的绑定、解绑、更新会实时生效，不需要重新发布API。**
   
   
 
#### 脚本配置示例
```
{
  "cache_key": {
    "system_params": [
      "$context.sourceIp",
      "$context.requestId"
    ],
    "parameters": [
      "demo_parameters"
    ],
    "headers": [
      "demo_header"
    ]
  },
  "cache_http_status_and_ttl": [
    {
      "http_status": [
        200
      ],
      "ttl": 300
    }
  ],
  "client_cache_control": {
    "mode": "apps",
    "datas": [
      "demo_app_id_1,demo_app_id_2"
    ]
  },
  "cacheable_headers": [
    "demo_cacheable_headers_1,demo_cacheable_headers_2"
  ]
}
```
 #### 为策略绑定API
1. 单击策略名称，进入策略详情。
2. 在API列表区域选择环境后，单击"绑定API"。
3. 筛选API分组以及发布环境，勾选所需的API。 
   支持通过API名称或标签筛选API，标签为创建API时定义的标签。
   
   
4. 单击"确定"，绑定完成。 
   - 如果单个API不需要绑定此策略，单击API所在行的"解绑"。
   
   - 如果批量API不需要绑定此策略，则勾选待解绑的API，单击列表上方"解绑"。最多同时解绑1000个API。
   
   
   
   
 
#### 相关文档
如果您希望通过API创建响应缓存策略，请参考[创建插件](https://support.huaweicloud.com/api-apig/CreatePlugin.html)。
