更新时间: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
  • x-obs-request-id
  • x-obs-api
  • content-type
  • content-length
  • cache-control
  • content-disposition
  • content-encoding
  • content-language
  • expires
  • x-obs-id-2
  • x-reserved-indicator
  • 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

允许响应中返回指定的附加头域。

须知:

附加头域:指定浏览器可以暴露给客户端的响应消息头。

比如在浏览器环境中,需要获取etag值,由于etag不属于标准响应头,就需要添加到扩展头域。

通过obs console配置桶的cors

  1. 登录obs console后在桶列表中,单击待操作的桶,进入“概览”页面;如下图所示

  2. 在“基础配置”下,单击“cors规则”卡片,进入“cors规则”界面。
  3. 在“cors规则”界面,单击“创建”,系统弹出“创建cors规则”对话框,在该对话框中按照上表的参数进行配置,如下图所示:

  4. 单击“确定”,并在“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)

相关文档

网站地图