云原生网关支持路由级别的跨域资源共享CORS(Cross-Origin Resource Sharing)策略配置,您可以有选择的为有跨域需求的路由设置合适的跨域策略。

背景信息

跨域资源共享CORS(Cross-Origin Resource Sharing)是指允许Web应用服务器进行跨域访问控制,从而实现跨域数据安全传输。关于跨域的更多信息,请参见跨源资源共享(CORS)

配置跨域策略

  1. 登录MSE网关管理控制台
  2. 在左侧导航栏选择云原生网关 > 网关列表
  3. 在顶部菜单栏选择地域,然后单击目标网关名称或操作列下的管理
  4. 网关详情页面左侧导航栏单击路由配置
  5. 路由配置页面,在需要变更的路由规则操作列单击策略配置
  6. 策略配置区域单击跨域页签。
    • 如果您是首次配置跨域策略,根据系统提示单击配置策略
    • 如果您已配置过跨域策略,单击跨域右侧的编辑图标进行编辑。
  7. 在跨域策略列表中设置配置参数,然后单击下方的确认
    配置跨域策略

    跨域策略参数说明如下:

    参数 描述
    允许的访问来源 设置允许通过浏览器访问服务器资源的站点。参数输入规则如下:
    • 允许所有的访问来源:*
    • 允许指定根域名的访问来源:*.example.com
    • 允许多个具体的访问来源:以http://https://开头,并且以回车分隔。
    说明 该参数作用于Access-Control-Allow-Origin头部。当客户端请求的Origin头部匹配上任意您设置的允许的访问来源,跨域响应的Access-Control-Allow-Origin将会被设置为客户端请求的Origin头部。
    允许的方法 选择跨域访问时允许的HTTP方法。常见的方法有GET、POST、PUT、DELETE、HEAD、OPTIONS和PATCH。
    说明 该参数作用于Access-Control-Allow-Methods头部。
    允许的请求头部 除了浏览器内置的基础Header,设置跨域访问时允许的Header。参数输入规则如下:
    • 允许所有的请求头部:*
    • 允许多个具体的请求头部:输入具体的请求头部,并以回车分隔。
    说明 该参数作用于Access-Control-Allow-Headers头部。
    允许的响应头部 允许浏览器、JavaScript脚本访问的响应头部。参数输入规则如下:
    • 允许所有的响应头部:*
    • 允许多个具体的响应头部:输入具体的响应头部,并以回车分隔。
    说明 该参数作用于Access-Control-Expose-Headers头部。
    允许携带凭证 跨域访问时是否允许携带凭证信息。
    说明 该参数作用于Access-Control-Allow-Credentials头部。
    预检的过期时间 对于非简单请求,设置OPTIONS预检请求在浏览器的最大缓存时间。
    说明 该参数作用于Access-Control-Max-Age头部。
    开启状态 打开开启状态右侧的开关。
    • 开启:开启跨域策略后,您的服务器资源允许被设置的第三方源站通过浏览器进行跨域访问。
    • 关闭:关闭跨域策略后,您的服务器资源禁止被任意第三方源站通过浏览器进行跨域访问。

结果验证

  • 执行以下测试请求命令:
    curl -I -H "Origin: http://example.com" -H 'Host: www.test.com' -X OPTIONS http://121.196.XX.XX/demo/item/list
  • 响应结果:
    HTTP/1.1 200 OK
    allow: GET,HEAD,OPTIONS
    x-content-type-options: nosniff
    x-xss-protection: 1; mode=block
    cache-control: no-cache, no-store, max-age=0, must-revalidate
    pragma: no-cache
    expires: 0
    x-frame-options: DENY
    content-length: 0
    date: Tue, 30 Nov 2021 03:20:31 GMT
    x-envoy-upstream-service-time: 6
    access-control-allow-origin: http://example.com
    access-control-allow-credentials: true
    access-control-expose-headers: *
    server: istio-envoy