
# 配置API的跨域资源共享
出于安全性考虑，浏览器会限制从页面脚本内发起的跨域请求，此时页面只能访问当前域的资源。CORS允许浏览器向跨域服务器发送XMLHttpRequest请求，从而实现跨域访问。更多跨域访问的说明请参见[跨域调用APIC开放的API](https://support.huaweicloud.com/usermanual-roma/roma_03_2124.html)。
ROMA Connect支持通过插件策略的方式，为API提供灵活的扩展能力。跨域资源共享策略为跨域访问提供指定预检请求头和响应头、自动创建跨域预检请求API的扩展能力，可快速、灵活的实现API的跨域访问。
插件策略和API本身相互独立，只有为API绑定插件后，插件策略才对API生效。为API绑定插件策略时需指定发布环境，插件只对指定环境上的API生效。
#### 约束与限制
- 同一个API在同一个环境中只能绑定一个相同类型的插件策略，已被API绑定的插件策略无法删除。
- 同一API分组下，发布在同一环境且请求路径相同的所有API，只能绑定同一个跨域资源共享策略。
- 若API开启了"支持CORS"功能的同时，也绑定了跨域资源共享策略，则以绑定的插件策略为准。
- 若某个请求路径下有OPTIONS方法的API，则在OPTIONS方法API所在发布环境中，该请求路径的所有API均不允许绑定跨域资源共享策略。
- 为API绑定插件策略时，API的请求方法必须为allow_methods中允许的请求方法。
 
#### 创建跨域资源共享策略
1. 登录[ROMA Connect控制台](https://console.huaweicloud.com/roma3)，在左侧导航栏选择"资源管理"，在实例页面单击实例，进入实例控制台。
2. 在左侧的导航栏选择"服务集成 APIC \> API策略"，在"策略管理"页签下单击"创建策略"。
3. 在选择策略类型弹窗中选择"插件策略 \> 跨域资源共享"。
4. 在配置策略弹窗中配置插件策略信息。
   表1策略配置 
   | 参数                | 说明                                                                                                                                                                                                                                                                               |
   |:---|:---|
   | 策略名称              | 填写策略的名称，根据规划自定义。建议您按照一定的命名规则填写策略名称，方便您快速识别和查找。                                                                                                                                                                                                                                   |
   | 策略类型              | 固定为"跨域资源共享"。                                                                                                                                                                                                                                                                     |
   | 可见范围              | 选择策略的可见范围。 - 集成应用：策略归属某个集成应用，仅拥有该集成应用权限的用户可查看和使用该策略。  - 全局：当前实例的所有用户都可查看和使用该策略。   |
   | 集成应用              | **仅当"可见范围"选择"集成应用"时需要配置。** 选择策略所属的集成应用。若没有可用的集成应用，可单击右侧的"新建集成应用"，创建一个集成应用。                                                                                                                                                                         |
   | 描述                | 填写策略的描述信息。                                                                                                                                                                                                                                                                       |
   | 策略内容：支持表单模式和脚本模式两种方式，脚本模式配置请参见[脚本配置示例]。                                                                                                                                                                                                                      ||
   | 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时）默认允许在请求中携带，无需在该参数中设置。           |
   | Exposed Headers   | Access-Control-Expose-Headers响应头，指定XMLHttpRequest请求响应中允许携带的响应头字段，多个响应头之间使用英文逗号隔开。 其中，基本响应头Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma默认允许在响应中携带，无需在该参数中设置。                                                             |
   | Maximum Age       | Access-Control-Max-Age响应头，指定本次预检请求的有效期，单位为秒。在有效期内，无需再次发出预检请求。                                                                                                                                                                                                                    |
   | Allow Credentials | Access-Control-Allow-Credentials响应头，表示是否允许浏览器读取请求响应的内容。                                                                                                                                                                                                                          |
      
   
5. 单击"确定"，完成插件策略的创建。
   - 在策略列表中显示已创建的访问控制策略，表示策略创建成功。
   
   - 如果您需要复制已创建的策略，请在已创建策略的"操作"列中单击"克隆"配置参数即可。**克隆策略的名称不能与已创建的策略名称重复。**
    
6. 插件策略创建后，您还需要[为API绑定插件策略]，才能使插件策略对API生效。
   **策略的绑定、解绑、更新会实时生效，不需要重新发布API。**
   
 
 #### 为API绑定插件策略
1. 在"策略管理"页签右上角的过滤条件中选择"跨域资源共享"。
2. 在页面中单击策略的名称，进入策略详情页面。
3. 在"关联API"下选择要绑定API的环境，然后单击"绑定API"。
4. 在绑定API弹窗中，勾选要绑定策略的API。 您可以通过指定API分组和API名称，筛选所需API。
   
5. 单击"确定"，完成API与插件策略的绑定。
 
 #### 脚本配置示例
```
{
  "allow_origin": "*",
  "allow_methods": "GET,POST,PUT",
  "allow_headers": "Accept-Ranges,Cache-Control",
  "expose_headers": "X-Request-Id,X-Apig-Latency",
  "max_age": 172800,
  "allow_credentials": true
}
```
