背景介绍
跨源资源共享(CORS,或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其他源(域、协议或端口),使得浏览器允许这些源访问加载自己的资源。目前许多 HTML 页面都会加载来自不同域下的 CSS 样式表,图像和脚本等资源。因此,解决跨域问题显得尤为重要。
跨源资源共享标准通过新增一系列 HTTP 响应头部,使得服务器能声明哪些来源可以通过浏览器访问该服务器上的资源。
跨域响应头部
头部字段 | 说明 |
Access-Control-Allow-Origin | 值支持常量以及变量。其中: 常量:支持输入 * ,或多个域名、IP、以及域名与 IP 混填(必须包含 http:// 或 https://,例如:http://test.com,http://1.1.1.1, 多值可通过英文逗号分隔,最多可输入 1000 字符。变量:将需要支持的跨域来源域名通过 Origin 请求头进行匹配,头部值使用${http.request.headers["Origin"]}。 |
Access-Control-Allow-Methods | 用于设置跨域允许的 HTTP 请求方法,可同时设置多个方法,例如 POST、GET、OPTIONS,多值可通过英文逗号分隔,最多可输入 1000 字符。 |
Access-Control-Max-Age | 用于指定预请求的有效时间,单位为 秒,支持输入 0 ~ 2147483647 的整型数值。非简单的跨域请求,在正式通信之前,需要增加一次 HTTP 查询请求,称为“预请求”,用来查明这个跨域请求是不是安全可以接受的,如下请求会被视为非简单的跨域请求:以 GET、HEAD 或者 POST 以外的方式发起,或者使用 POST,但是请求数据类型为 application/x-www-form-urlencoded、 multipart/form-data、text/plain 以外的数据类型,如 application/xml 或者 text/xml。使用自定义请求头为:Access-Control-Max-Age: 1728000,表明在 1728000秒内,对该资源的跨域访问不再发送另外一条预请求。 |
说明:
若在 EdgeOne 上设置跨域响应头,那么响应
Access-Control-Allow-Origin 头部的前提条件为客户端请求携带 Origin 头部,且该头部与设置的 Access-Control-Allow-Origin 任意一个值精确匹配。若源站有设置跨域响应头,则 EdgeOne 上无需配置,否则出现两个跨域响应头部,会导致跨域报错。另外,若由源站来实现跨域响应,需要源站响应
Vary: Origin 头部,且在 EdgeOne 上开启 Vary 特性。配置示例
场景一:跨域头响应仅允许指定的域名访问页面资源
若您的业务场景涉及跨域访问,当前业务域名为
www.example.com 的资源仅允许来自 example.com 、site.com 的页面访问加速域名,可参考以下步骤。1. 登录 边缘安全加速平台 EO 控制台,在左侧菜单栏中,进入服务总览,单击网站安全加速内需配置的站点。
2. 在站点详情页面,单击站点加速 > 规则引擎,进入规则引擎页面。
3. 在规则引擎页面,单击创建规则,选择新增空白规则。
4. 在规则编辑页面,匹配类型选择为 HOST 等于
www.example.com,同时设置匹配类型 HTTP 请求头 Origin 头部值等于
*.example.com、*.site.com。5. 单击操作 > 选择框,在弹出的操作列表内,选择操作为修改 HTTP 节点响应头。
6. 选择类型为设置,头部名称为
Access-Control-Allow-Origin,头部值设置为 ${http.request.headers["Origin"]}。

7. 单击保存并发布,即可完成该规则配置。
8. 生效行为说明。
当客户端请求中携带 Origin:
http://www.example.com 时,则 EdgeOne 会响应 Access-Control-Allow-Origin: http://www.example.com当客户端请求中携带 Origin:
http://www.site.com 时,则 EdgeOne 会响应 Access-Control-Allow-Origin: http://www.site.com当客户端请求中携带 Origin:
http://www.abc.com 时,则 EdgeOne 不会响应跨域响应头部 Access-Control-Allow-Origin当客户端请求未携带 Origin 时,则 EdgeOne 不会响应跨域响应头部
Access-Control-Allow-Origin场景二:跨域头响应支持所有域名访问页面资源
若您的业务场景涉及跨域访问,当前业务域名为
www.example.com 的资源允许所有页面访问加速域名,可参考以下步骤。1. 登录 边缘安全加速平台 EO 控制台,在左侧菜单栏中,进入服务总览,单击网站安全加速内需配置的站点。
2. 在站点详情页面,单击站点加速 > 规则引擎,进入规则引擎页面。
3. 在规则引擎页面,单击创建规则,选择新增空白规则。
4. 在规则编辑页面,匹配类型选择为 HOST 等于
www.example.com。5. 单击操作 > 选择框,在弹出的操作列表内,选择操作为修改 HTTP 节点响应头。
6. 选择类型为设置,头部名称为
Access-Control-Allow-Origin,头部值设置为* 。

7. 单击保存并发布,即可完成该规则配置。
8. 生效行为说明。
当客户端请求中携带
Origin 时,则 EdgeOne 会响应 Access-Control-Allow-Origin: *当客户端请求未携带
Origin 时,则 EdgeOne 不会响应跨域响应头部 Access-Control-Allow-Origin