一、简介
对象存储服务针对跨域访问,支持响应 OPTIONS 请求 ,并根据开发者设定的规则向浏览器返回具体设置的规则。但服务端并不会校验随后发起的跨域请求是否符合规则。更多详细资料请参见 关于 HTTP 访问控制的说明 和 设置跨域访问 最佳实践文档。
二、使用对象存储控制台
1. 登录 对象存储桶控制台。
2. 在左侧导航栏中,单击存储桶列表,进入存储桶列表页面。
3. 找到需要设置跨域访问的存储桶,单击其存储桶名称,进入存储桶详情页面。
4. 在左侧导航栏中,选择安全管理 > 跨域访问 CORS 设置,在跨域访问 CORS 设置栏中,单击添加规则。
5. 添加规则信息(带 * 号的为必填项),配置项说明如下。
·来源 Origin:允许跨域请求的来源,请添加自己所使用的域名。支持添加域名(包括中文域名)和 IP 地址。
·域名末尾不需要携带/。
·可以同时指定多个来源,每行只能填写一个。
·配置支持*,表示全部域名和 IP 地址都允许,不推荐。
注意:如果用户对 AJAX 请求开启了 xhr.withCredentials = true(表示请求需要携带域名 Cookie),那么在该场景下不允许配置 Access-Control-Allow-Origin:*,需要配置具体域名。但 COS 的域名一般用于静态网站,不需要使用 Cookie,因此建议不开启 xhr.withCredentials = true。
·支持单个具体域名,形如 http://www.example.com。
·支持二级泛域名,形如 http://*.example.com ,但是每行只能有一个*号。若配置 http://*.example.com,可允许http://a.b.example.com、http://a.example.com 等来源地址。
·注意不要遗漏协议名 http 或 https,若端口不是默认的80,还需要带上端口。其中 IP 地址的举例为 http://10.10.10.10。
·中文域名建议同时添加中文域名和 punycode 编码后的域名。例如 https://中文.cn 和 https://xn--fiq228c.cn。
·操作 Methods:支持 GET、PUT、POST、DELETE、HEAD。枚举允许一个或多个跨域请求方法。
·Allow-Headers:在发送 OPTIONS 请求时告知服务端,接下来的请求可以使用哪些自定义的 HTTP 请求头部,例如:x-cos-meta-md5。
·可以同时指定多个 Headers,每行只能填写一个,例如 Content-Type。
·Header 容易遗漏,没有特殊需求的情况下,建议设置为 *,表示允许所有。
·支持英文大小写 [a-z,A-Z]。
·在 Access-Control-Request-Headers 中指定的每个 Header,都必须在 Allowed-Headers 中有对应项。
·Expose-Headers:Expose-Headers 里返回的是 COS 的常用 Header,详情请参见 公共请求头部。具体的配置需要根据应用的需求确定,默认推荐填写 ETag。不允许使用通配符,大小写不敏感,支持多行且每行只能填写一个。
·超时 Max-Age:设置 OPTIONS 请求得到结果的有效期(秒)。数值必须为正整数,例如600。
·返回 Vary: Origin:设置是否返回 Vary: Origin Header。如果浏览器同时存在 CORS 和非 CORS 请求,请启用该选项,否则会出现跨域问题。
6. 设置完成后,单击保存即可。此时你可以看到跨域访问规则已添加完成。如需修改,可单击编辑进行设置。
三、使用 REST API/SDK
你可以通过以下 API 设置跨域访问:
·PUT Bucket cors
·GET Bucket cors
·DELETE Bucket cors
你可以直接调用 SDK 设置跨域访问,详情请参见下列各语言 SDK 文档:
Android、C、C++、.NET(C#)、Go、iOS、Java、JavaScript、Node.js、PHP、Python、小程序。