更新时间:2024-11-27 GMT+08:00
分享

配置API的跨域资源共享

出于安全性考虑,浏览器会限制从页面脚本内发起的跨域请求,此时页面只能访问当前域的资源。CORS允许浏览器向跨域服务器发送XMLHttpRequest请求,从而实现跨域访问。更多跨域访问的说明请参见跨域调用APIG开放的API

跨域资源共享策略为跨域访问提供指定预检请求头和响应头、自动创建跨域预检请求API的扩展能力,可快速、灵活的实现API的跨域访问。

  • 如果此策略在当前实例中不支持,请联系技术支持升级实例到最新版本。
  • 策略参数会明文展示,为防止信息泄露,请谨慎配置。

使用限制

  • 同一API分组下,相同请求路径的所有API,只能绑定同一个跨域资源共享策略。
  • 如果API开启了“支持CORS”功能的同时,也绑定了跨域资源共享策略,则以绑定的策略为准。
  • 如果某个请求路径下有OPTIONS方法的API,则该请求路径下的所有API均不允许绑定跨域资源共享策略。
  • 为策略绑定API时,API的请求方法必须为allow_methods中允许的请求方法。
  • 一个API只能绑定一个相同类型的策略。
  • 策略和API本身相互独立,只有为API绑定策略后,策略才对API生效。为API绑定策略时需指定发布环境,策略只对指定环境上的API生效。
  • 策略的绑定、解绑、更新会实时生效,不需要重新发布API。
  • API的下线操作不影响策略的绑定关系,再次发布后仍然会带有下线前绑定的策略。
  • 如果策略与API有绑定关系,则策略无法执行删除操作。

创建跨域资源共享策略

  1. 进入API网关控制台页面。
  2. 根据实际业务在左侧导航栏上方选择实例。
  1. 在左侧导航栏选择“API管理 > API策略”。
  2. 在“策略管理”页面,单击“创建策略”。
  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时)默认允许在请求中携带,无需在该参数中设置。

    说明:
    • 创建跨域资源共享策略时,默认不配置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响应头,指定本次预检请求的有效期,单位为秒。在有效期内,无需再次发出预检请求。

    Allowed Credentials

    Access-Control-Allow-Credentials响应头,定XMLHttpRequest请求中是否允许携带Cookie。

    • 开关开启表示允许。
    • 开关关闭表示不允许。

  5. 单击“确定”。

    • 如果您需要复制已创建的策略,请在已创建策略的“操作”列中单击“克隆”配置参数即可。

      克隆策略的名称不能与已创建的策略名称重复。

    • 策略创建后,您还需要为策略绑定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。

相关文档