更新时间:2024-10-23 gmt 08:00
配置桶的cors-九游平台

开发过程中,您有任何问题可以在github上,或者在中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。
由于obs以桶为单位提供基于http/https协议的分布式存储服务,而浏览器默认不允许ajax跨域请求,因此使用obs browserjs sdk访问桶前必须配置该桶的cors。您可以通过obs console、obs browser或者除obs browserjs sdk外的其他obs sdk三种途径配置桶的cors,推荐为桶的cors配置的规则如下:
配置项 |
配置值 |
说明 |
---|---|---|
allowedorigin |
* |
允许任意请求来源。
说明:
也可以配置具体的域名或ip。 |
allowedmethod |
put、get、post、delete、head |
允许所有的http方法。 |
allowedheader |
* |
允许请求中携带任意头域。 |
exposeheader |
|
允许响应中返回指定的附加头域。
须知:
附加头域:指定浏览器可以暴露给客户端的响应消息头。 比如在浏览器环境中,需要获取etag值,由于etag不属于标准响应头,就需要添加到扩展头域。 |
通过obs console配置桶的cors
- 登录obs console后在桶列表中,单击待操作的桶,进入“概览”页面;如下图所示
- 在“基础配置”下,单击“cors规则”卡片,进入“cors规则”界面。
- 在“cors规则”界面,单击“创建”,系统弹出“创建cors规则”对话框,在该对话框中按照上表的参数进行配置,如下图所示:
- 单击“确定”,并在“cors规则”界面查看已配置好的规则。

桶的cors配置会在两分钟内生效,生效后才能使用obs browserjs sdk访问桶。
通过obs java sdk配置桶的cors
您可以使用obs java sdk调用obsclient.setbucketcors接口配置桶的cors,示例代码如下:
// endpoint以北京四为例,其他地区请按实际情况填写。 string endpoint = "https://obs.cn-north-4.myhuaweicloud.com"; string ak = system.getenv("access_key_id"); string sk = system.getenv("secret_access_key_id"); // 创建obsclient实例 obsclient obsclient = new obsclient(ak, sk, endpoint); bucketcors cors = new bucketcors(); listrules = new arraylist (); bucketcorsrule rule = new bucketcorsrule(); // 指定允许跨域请求的来源 arraylist allowedorigin = new arraylist (); allowedorigin.add( "*"); rule.setallowedorigin(allowedorigin); // 指定允许跨域请求的方法 arraylist allowedmethod = new arraylist (); allowedmethod.add("get"); allowedmethod.add("post"); allowedmethod.add("put"); allowedmethod.add("delete"); allowedmethod.add("head"); rule.setallowedmethod(allowedmethod); // 指定允许跨域请求的头域 arraylist allowedheader = new arraylist (); allowedheader.add("*"); rule.setallowedheader(allowedheader); // 指定允许跨域请求的响应中的附加头域 arraylist exposeheader = new arraylist (); exposeheader.add("etag"); exposeheader.add("content-type"); exposeheader.add("content-length"); exposeheader.add("cache-control"); exposeheader.add("content-disposition"); exposeheader.add("content-encoding"); exposeheader.add("content-language"); exposeheader.add("expires"); exposeheader.add("x-obs-request-id"); exposeheader.add("x-obs-id-2"); exposeheader.add("x-reserved-indicator"); exposeheader.add("x-obs-api"); exposeheader.add("x-obs-version-id"); exposeheader.add("x-obs-copy-source-version-id"); exposeheader.add("x-obs-storage-class"); exposeheader.add("x-obs-delete-marker"); exposeheader.add("x-obs-expiration"); exposeheader.add("x-obs-website-redirect-location"); exposeheader.add("x-obs-restore"); exposeheader.add("x-obs-version"); exposeheader.add("x-obs-object-type"); exposeheader.add("x-obs-next-append-position"); rule.setexposeheader(exposeheader); rule.setmaxagesecond(100); rules.add(rule); cors.setrules(rules); try { obsclient.setbucketcors("bucketname", cors); catch (obsexception e) { system.out.println("http code: " e.getresponsecode()); system.out.println("error code:" e.geterrorcode()); system.out.println("error message: " e.geterrormessage()); system.out.println("request id:" e.geterrorrequestid()); system.out.println("host id:" e.geterrorhostid()); } }
通过obs python sdk配置桶的cors
您可以使用obs python sdk调用obsclient.setbucketcors接口配置桶的cors,示例代码如下:
# 引入模块 from obs import obsclient # 推荐通过环境变量获取aksk,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 # 您可以登录访问管理控制台获取访问密钥ak/sk,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。 ak = os.getenv("accesskeyid") sk = os.getenv("secretaccesskey") # 【可选】如果使用临时aksk和securitytoken访问obs,则同样推荐通过环境变量获取 security_token = os.getenv("securitytoken") # server填写bucket对应的endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 server = "https://obs.cn-north-4.myhuaweicloud.com" # 创建obsclient实例 # 如果使用临时aksk和securitytoken访问obs,需要在创建实例时通过security_token参数指定securitytoken值 obsclient = obsclient(access_key_id=ak, secret_access_key=sk, server=server) from obs import corsrule # 指定允许跨域请求的来源 allowedorigin = ['*'] # 指定允许跨域请求的方法 allowedmethod = ['put', 'post', 'get', 'delete', 'head'] # 指定允许跨域请求的头域 allowedheader = ['*'] # 指定允许跨域请求的响应中的附加头域 exposeheader = ['etag', 'content-type', 'content-length', 'cache-control', 'content-disposition', 'content-encoding', 'content-language', 'expires', 'x-obs-request-id', 'x-obs-id-2', 'x-reserved-indicator', 'x-obs-api', 'x-obs-version-id', 'x-obs-copy-source-version-id', 'x-obs-storage-class', 'x-obs-delete-marker', 'x-obs-expiration', 'x-obs-website-redirect-location', 'x-obs-restore', 'x-obs-version', 'x-obs-object-type', 'x-obs-next-append-position'] maxagesecond = 100 cors = corsrule(id='rule1', allowedmethod=allowedmethod, allowedorigin=allowedorigin, allowedheader=allowedheader, maxagesecond=maxagesecond, exposeheader=exposeheader) resp = obsclient.setbucketcors('bucketname', corslist=[cors]) if resp.status < 300: print('requestid:', resp.requestid) else: print('errorcode:', resp.errorcode) print('errormessage:', resp.errormessage)

- 除obs browserjs sdk外,其他语言的obs sdk均支持配置桶的cors;
- 您也可以参考obs console配置跨域资源共享或者各sdk语言开发指南的配置cors规则章节,完成桶的cors配置。
父主题:
相关文档
意见反馈
文档内容是否对您有帮助?
提交成功!非常感谢您的反馈,我们会继续努力做到更好!
您可在查看反馈及问题处理状态。
系统繁忙,请稍后重试
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨