
# 配置桶的CORS
![](https://support.huaweicloud.com/sdk-browserjs-devg-obs/public_sys-resources/notice_3.0-zh-cn.png)
开发过程中，您有任何问题可以在github上[提交issue](https://github.com/huaweicloud/huaweicloud-sdk-browserjs-obs/issues)，或者在[华为云对象存储服务论坛](https://bbs.huaweicloud.com/forum/forum-620-1.html)中发帖求助。[接口参考文档](https://support.huaweicloud.com/api-obs_browserjs_sdk_api_zh/obs_34_0001.html)详细介绍了每个接口的参数和使用方法。
由于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后在桶列表中，单击待操作的桶，进入"概览"页面；如下图所示 
   ![](https://support.huaweicloud.com/sdk-browserjs-devg-obs/zh-cn_image_0000001367351433.png "点击放大")
   
   
2. 在"基础配置"下，单击"CORS规则"卡片，进入"CORS规则"界面。
3. 在"CORS规则"界面，单击"创建"，系统弹出"创建CORS规则"对话框，在该对话框中按照上表的参数进行配置，如下图所示： 
   ![](https://support.huaweicloud.com/sdk-browserjs-devg-obs/zh-cn_image_0000001359381605.png "点击放大")
   
   
4. 单击"确定"，并在"CORS规则"界面查看已配置好的规则。
![](https://support.huaweicloud.com/sdk-browserjs-devg-obs/public_sys-resources/note_3.0-zh-cn.png)
桶的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<BucketCorsRule> rules = new ArrayList<BucketCorsRule>();
BucketCorsRule rule = new BucketCorsRule();
// 指定允许跨域请求的来源
ArrayList<String> allowedOrigin = new ArrayList<String>();
allowedOrigin.add( "*");  
rule.setAllowedOrigin(allowedOrigin);
// 指定允许跨域请求的方法
ArrayList<String> allowedMethod = new ArrayList<String>();
allowedMethod.add("GET");  
allowedMethod.add("POST");
allowedMethod.add("PUT");
allowedMethod.add("DELETE");
allowedMethod.add("HEAD");
rule.setAllowedMethod(allowedMethod);
// 指定允许跨域请求的头域
ArrayList<String> allowedHeader = new ArrayList<String>();
allowedHeader.add("*"); 
rule.setAllowedHeader(allowedHeader);
// 指定允许跨域请求的响应中的附加头域
ArrayList<String> exposeHeader = new ArrayList<String>();
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)
```
![](https://support.huaweicloud.com/sdk-browserjs-devg-obs/public_sys-resources/note_3.0-zh-cn.png)
- 除OBS BrowserJS SDK外，其他语言的OBS SDK均支持配置桶的CORS；
- 您也可以参考[OBS Console配置跨域资源共享](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0066036542.html)或者[各SDK语言开发指南](https://support.huaweicloud.com/sdkreference-obs/obs_02_0001.html)的配置CORS规则章节，完成桶的CORS配置。
 
