
# 配置API的跨域资源共享
出于安全性考虑，浏览器会限制从页面脚本内发起的跨域请求，此时页面只能访问当前域的资源。CORS允许浏览器向跨域服务器发送XMLHttpRequest请求，从而实现跨域访问。更多跨域访问的说明请参见[跨域调用APIG开放的API](https://support.huaweicloud.com/usermanual-apig/apig_03_0011.html)。
跨域资源共享策略为跨域访问提供指定预检请求头和响应头、自动创建跨域预检请求API的扩展能力，可快速、灵活地实现API的跨域访问。
![](https://support.huaweicloud.com/usermanual-apig/public_sys-resources/note_3.0-zh-cn.png)
- 如果此策略在当前实例中不支持，请[提交工单](https://support.huaweicloud.com/usermanual-ticket/zh-cn_topic_0127038618.html)升级实例到最新版本。
- 策略参数会明文展示，为防止信息泄露，请谨慎配置。
 
#### 约束与限制
- 同一个环境中，一个API只能被一个跨域共享策略绑定，但一个跨域共享策略可以绑定多个API。
- 同一API分组下，相同请求路径的所有API，只能绑定同一个跨域资源共享策略。
- 如果API开启了"支持CORS"功能的同时，也绑定了跨域资源共享策略，则以绑定的策略为准。
- 如果某个请求路径下有OPTIONS方法的API，则该请求路径下的所有API均不允许绑定跨域资源共享策略。
- [为策略绑定API]时，API的请求方法必须为allow_methods中允许的请求方法。
- 策略和API本身相互独立，只有为API绑定策略后，策略才对API生效。为API绑定策略时需指定发布环境，策略只对指定环境上的API生效。
- API的下线操作不影响策略的绑定关系，再次发布后仍然会带有下线前绑定的策略。
- 如果策略与API有绑定关系，则策略无法执行删除操作。
- 如果此策略在当前实例中不支持，请[提交工单](https://support.huaweicloud.com/usermanual-ticket/zh-cn_topic_0127038618.html)升级实例到最新版本。
 
#### 创建跨域资源共享策略
1. 进入[API网关控制台](https://console.huaweicloud.com/apig2/#/overview)页面。
2. 根据实际业务在左侧导航栏上方选择实例。

3. 在左侧导航栏选择"API管理 \> API策略"。
4. 在"策略管理"页面，单击"创建策略"。
5. 在"选择策略类型"弹窗中，选择"插件策略 \> 跨域资源共享"。
6. 在"创建策略"弹窗中，根据下表参数说明，配置策略信息。 
   表1跨域资源共享策略配置 
   | 参数                | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   |:---|:---|
   | 策略名称              | 填写策略的名称，根据业务规划自定义。建议您按照一定的命名规则填写策略名称，方便您快速识别和查找。 支持中文、英文、数字、下划线，且只能以英文或中文开头，长度为3\~255个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 策略类型              | 固定为"跨域资源共享"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | 描述                | 填写策略的描述信息。长度为1\~255个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | 策略内容              | 策略的配置内容，支持表单配置和脚本配置两种方式。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | Allowed Origins   | Access-Control-Allow-Origin响应头，指定允许访问API的外域URI，多个URI之间使用英文逗号隔开。 对于未携带身份凭证的请求，可以把参数值设置为"\*"，表示允许来自所有域的访问请求。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | Allowed Methods   | Access-Control-Allow-Methods响应头，指定允许使用的HTTP请求方法，多个请求方法之间使用英文逗号隔开。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | Allowed Headers   | Access-Control-Allow-Headers响应头，指定XMLHttpRequest请求中允许携带的请求头字段，多个请求头之间使用英文逗号隔开。 其中，简单请求头Accept、Accept-Language、Content-Language、Content-Type（取值仅限为application/x-www-form-urlencoded、multipart/form-data、text/plain时）默认允许在请求中携带，无需在该参数中设置。 说明： - 创建跨域资源共享策略时，默认不配置Allowed Headers，不允许跨域请求携带任何自定义请求头。  - 配置Allowed Headers为"\*"，表示允许跨域请求头携带所有请求头。                                                                                                                  |
   | Exposed Headers   | Access-Control-Expose-Headers响应头，指定XMLHttpRequest请求响应中允许携带的响应头字段，多个响应头之间使用英文逗号隔开。 其中，基本响应头Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma默认允许在响应中携带，无需在该参数中设置。 说明： - 创建跨域资源共享策略时，默认不配置Exposed Headers，不允许浏览器的JavaScript代码解析跨域访问获得的响应头内容（除XMLHttpRequest对象的getResponseHeader()方法获得的基本响应头，Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma）。  - 配置Exposed Headers为"\*"，表示允许浏览器的JavaScript代码解析跨域访问获得的所有响应头内容。   |
   | Maximum Age       | Access-Control-Max-Age响应头，指定本次预检请求的有效期，单位为秒。在有效期内，无需再次发出预检请求。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | Allow Credentials | Access-Control-Allow-Credentials响应头，指定XMLHttpRequest请求中是否允许携带Cookie。 - 开关开启表示允许。  - 开关关闭表示不允许。                                                                                                                                                                                                                                                                        |
      
   
   
7. 单击"确定"。 
   - 在策略列表中显示已创建的策略，表示策略创建成功。
   
   - 如果您需要复制已创建的策略，请在已创建策略的"操作"列中单击"克隆"配置参数即可。**克隆策略的名称不能与已创建的策略名称重复。**
   
   
   
   
8. 策略创建后，您还需要[为策略绑定API]，才能使策略对API生效。
   
   **策略的绑定、解绑、更新会实时生效，不需要重新发布API。**
   
   
 
#### 脚本配置示例
```
{
  "allow_origin": "*",
  "allow_methods": "GET,POST,PUT",
  "allow_headers": "Content-Type,Accept,Accept-Ranges,Cache-Control",
  "expose_headers": "X-Request-Id,X-Apig-Latency",
  "max_age": 86400,
  "allow_credentials": true
}
```
 #### 为策略绑定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)。
