更新时间:2024-10-23 gmt 08:00
配置桶的cors-j9九游会登录
开发过程中,您有任何问题可以在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();
list rules = 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配置。
父主题:
相关文档
意见反馈
文档内容是否对您有帮助?
提交成功!非常感谢您的反馈,我们会继续努力做到更好!
您可在查看反馈及问题处理状态。
系统繁忙,请稍后重试
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨