
# 设置桶的CORS配置-SetBucketCors
#### 功能介绍
CORS（Cross Origin Resource Sharing），即跨域资源共享，是W3C标准化组织提出的一种规范机制，允许客户端的跨域请求的配置。通过本接口可设置桶的CORS配置，托管在OBS中的网站就可以响应另一个网站的跨域请求。了解更多有关跨域资源共享信息，请参见[配置跨域资源共享](https://support.huaweicloud.com/usermanual-obs/obs_03_0706.html)。
#### 授权信息
您必须是桶拥有者或拥有设置桶的CORS配置的权限，才能调用本接口，建议使用IAM或桶策略进行授权。了解更多OBS授权方式请参见[OBS不同权限控制方式的区别](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html)。
- 如果使用**IAM授权** ，那么请在"角色与策略授权"、"身份策略授权"两种IAM授权方式中选择一种，并配置相应权限：
  - 如果使用**角色与策略授权** （旧版IAM，即IAM v3接口），需具备**obs:bucket:PutBucketCORS** 权限，授权操作请参见[创建IAM自定义策略](https://support.huaweicloud.com/usermanual-iam/iam_01_0605.html)。
  
  - 如果使用**身份策略授权** （新版IAM，即IAM v5接口），如下表所示，需具备**obs:bucket:putBucketCORS** 权限，授权操作请参见[创建IAM自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0917.html)。
    
    | 授权项 Action | 访问级别 Access Level | 资源类型（\*为必须） Resource Type (\*: required) | [条件键](https://support.huaweicloud.com/api-obs/obs_04_0112.html#ZH-CN_TOPIC_0000002375307974__condition_table) Condition Key                                                                                                                                                                                                                                                                                                     | [别名](https://support.huaweicloud.com/iam5_faq/iam_01_1103.html) Alias | 依赖的授权项 Dependencies |
    |:---|:---|:---|:---|:---|:---|
    | obs:bucket:putBucketCORS                            | Write                                                      | bucket \*                                                                          | - [g:EnterpriseProjectId](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)  - [g:ResourceTag/\<tag-key\>](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)                                          | -                                                                                                              | -             |
    | obs:bucket:putBucketCORS                            | Write                                                      | -                                                                                  | - obs:EpochTime  - obs:SourceIp  - obs:TlsVersion  - obs:CustomDomain   | -                                                                                                              | -             |
       
    
   
- 如果使用**桶策略** 进行授权，需具备**obs:bucket:PutBucketCORS** 权限，具体操作请参见[自定义创建桶策略](https://support.huaweicloud.com/usermanual-obs/obs_03_0123.html)。
 
#### URI
PUT /
#### 调用方法
请参见[如何调用API](https://support.huaweicloud.com/api-obs/obs_04_0006.html)。调用前需要先[计算API签名](https://support.huaweicloud.com/api-obs/obs_04_0009.html)，并将签名添加到请求中。
您还可以使用[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/OBS/doc?api=SetBucketCors)在线调试接口。
#### 请求消息样式
```
PUT /?cors HTTP/1.1 
Host: bucketname.obs.cn-north-4.myhuaweicloud.com 
Content-Length: length
Date: date
Content-Type: application/xml
Authorization: authorization
Content-MD5: MD5
<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration> 
    <CORSRule> 
        <ID>id</ID> 
        <AllowedMethod>method</AllowedMethod> 
        <AllowedOrigin>origin</AllowedOrigin> 
        <AllowedHeader>header</AllowedHeader> 
        <MaxAgeSeconds>seconds</MaxAgeSeconds> 
        <ExposeHeader>header</ExposeHeader>
    </CORSRule> 
</CORSConfiguration>
```
#### URI参数（URI Parameters）
该请求通过URI中的**?cors**参数标识接口，无其他URI参数。
#### 请求头参数（Request headers）
该请求使用公共消息头外加CORS请求消息头，具体参见[表3](https://support.huaweicloud.com/api-obs/obs_04_0007.html#ZH-CN_TOPIC_0136436606__table25197309)和[表1]。
 表1CORS请求消息头 
| **消息头名称**   | **消息头类型** | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
|:---|:---|:---|:---|
| Content-MD5 | String    | 是        | **参数解释：** 按照RFC 1864标准计算出消息体的MD5摘要字符串，即消息体128-bit MD5值经过base64编码后得到的字符串。也支持设置Content-SHA256头域，其值为消息体256-bit SHA256值经过base64编码后得到的字符串，Content-MD5和Content-SHA256二选一。 示例：n58IG6hfM7vqI4K0vnWpog== **约束限制：** 无 **取值范围：** 无 **默认取值：** 无 |
   
#### 请求体参数（Request body）
在此请求中，需要在请求的消息体中配置桶的CORS配置信息。配置信息以XML格式上传，具体的配置元素如[表2]描述。
 表2CORS配置元素 
| **元素名称**          | **元素类型**  | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
|:---|:---|:---|:---|
| CORSConfiguration | Container | 是        | **参数解释：** CORSRules的根节点。 父节点：无 **约束限制：** 最大不超过64KB。 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| CORSRule          | Container | 是        | **参数解释：** CORS规则。 父节点：CORSConfiguration **约束限制：** CORSConfiguration下可最多包含100个CORS规则。 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ID                | String    | 否        | **参数解释：** 一条CORS规则的标识。 父节点：CORSRule **约束限制：** ID由不超过255个字符的字符串组成。 **取值范围：** 1\~255个字符的字符串组成。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| AllowedMethod     | String    | 是        | **参数解释：** 指定允许的跨域请求HTTP方法，即桶和对象的几种操作类型。 父节点：CORSRule **约束限制：** 无 **取值范围：** 支持以下HTTP方法： - GET：获取对象  - PUT：上传对象  - HEAD：获取对象元数据  - POST：表单上传对象  - DELETE：删除对象   **默认取值：** 无 |
| AllowedOrigin     | String    | 是        | **参数解释：** 指定允许的跨域请求的来源，即允许来自该域名下的请求访问该桶。 父节点：CORSRule。 **约束限制：** 表示域名的字符串，仅支持ASCII字符组成的域名。通过正则表达式进行匹配，每个匹配规则允许使用最多一个"\*"通配符。必须包含完整的协议（如 http 或 https）。 例如：https://\*.vbs.example.com。 **取值范围：** 符合CORS协议的取值范围，长度为\[0-20480\]个字符。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| AllowedHeader     | String    | 否        | **参数解释：** 指定允许的跨域请求的头域。配置CORS请求中允许携带的"Access-Control-Request-Headers"头域。如果一个请求带了"Access-Control-Request-Headers"头域，则只有匹配上AllowedHeader中的配置才认为是一个合法的CORS请求（通过正则表达式进行匹配）。 父节点：CORSRule **约束限制：** 最多可填写一个"\*"通配符，不支持\&、:、\<、空格以及中文字符。 **取值范围：** 符合CORS协议的取值范围，长度为\[0-20480\]个字符。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| MaxAgeSeconds     | Integer   | 否        | **参数解释：** 请求来源的客户端可以对跨域请求返回结果的缓存时间。 父节点：CORSRule **约束限制：** 每个CORSRule可以包含至多一个MaxAgeSeconds。 **取值范围：** 大于等于0的整型数，单位：秒。 **默认取值：** 3000                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ExposeHeader      | String    | 否        | **参数解释：** CORS规则允许响应中可返回的附加头域，给客户端提供额外的信息。默认情况下浏览器只能访问以下头域：Content-Length、Content-Type，如果需要访问其他头域，需要在附加头域中配置。 父节点：CORSRule **约束限制：** 不支持\*、\&、:、\<、空格以及中文字符。 **取值范围：** 符合CORS协议的取值范围。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   
#### 响应消息样式
```
HTTP/1.1 status_code
Date: date
Content-Length: length
```
#### 响应头 (Response Headers)
该请求的响应消息使用公共响应头，具体请参考[表1](https://support.huaweicloud.com/api-obs/obs_04_0013.html#ZH-CN_TOPIC_0173612084__d0e686)。
#### 响应体 (Response Body)
本接口的响应消息中不携带响应体。
#### 错误响应消息
无特殊错误，所有错误已经包含在[错误码概述](https://support.huaweicloud.com/api-obs/obs_04_0115.html)中。
#### 请求示例
```
PUT /?cors HTTP/1.1
User-Agent: curl/7.29.0
Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
Accept: */*
Date: Wed, 01 Jul 2015 03:51:52 GMT
Content-Type: application/xml
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:lq7BGoqE9yyhdEwE6KojJ7ysVxU=
Content-MD5: NGLzvw81f/A2C9PiGO0aZQ==
Content-Length: 617
<?xml version="1.0" encoding="utf-8"?>
<CORSConfiguration> 
  <CORSRule> 
    <AllowedMethod>POST</AllowedMethod>  
    <AllowedMethod>GET</AllowedMethod>  
    <AllowedMethod>HEAD</AllowedMethod>  
    <AllowedMethod>PUT</AllowedMethod>  
    <AllowedMethod>DELETE</AllowedMethod>  
    <AllowedOrigin>http://www.example.com</AllowedOrigin>  
    <AllowedHeader>AllowedHeader_1</AllowedHeader>  
    <AllowedHeader>AllowedHeader_2</AllowedHeader>  
    <MaxAgeSeconds>100</MaxAgeSeconds>  
    <ExposeHeader>ExposeHeader_1</ExposeHeader>  
    <ExposeHeader>ExposeHeader_2</ExposeHeader>
  </CORSRule>
</CORSConfiguration>
```
#### 响应示例
```
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: BF26000001643627112BD03512FC94A4
x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCSYi6wLC4bkrvuS9sqnlRjxK2a5Fe3ry
Date: Wed, 01 Jul 2015 03:51:52 GMT
Content-Length: 0
```
#### 请求示例：为桶配置两条CORS规则
```
PUT /?cors HTTP/1.1
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:iqSPeUBl66PwXDApxjRKk6hlcN4=
User-Agent: curl/7.29.0
Host: examplebucket.obs.region.myhuaweicloud.com
Date: Wed, 01 Jul 2015 02:37:22 GMT
Content-Type: application/xml
Content-MD5: HwVUAzslyD0rroMp/eIdwQ==
 
<CORSConfiguration>
    <CORSRule>
        <AllowedOrigin>http://www.example.com</AllowedOrigin>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
      
    </CORSRule>
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
 
    </CORSRule>
</CORSConfiguration>
```
#### 响应示例：为桶配置两条CORS规则
```
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCTPXg+yj9IXC9r6mgmWgfSfqQGvHM3rS
x-obs-request-id: 0000018A3A14051AD2886D166EE13D98
Server: OBS
Content-Length: 0
Date: Wed, 01 Jul 2015 02:37:22 GMT
```
#### 使用SDK调用接口
建议您使用OBS SDK调用接口。SDK对API进行了封装以简化您的开发工作，直接调用SDK接口函数即可访问OBS，无需手动计算签名。
| [Java](https://support.huaweicloud.com/sdk-java-devg-obs/obs_21_1402.html) | [Python](https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0829.html) | [C](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_1002.html) | [Go](https://support.huaweicloud.com/sdk-go-devg-obs/obs_33_0431.html) | BrowserJS不支持 | [.NET](https://support.huaweicloud.com/sdk-dotnet-devg-obs/obs_25_1002.html) | [Android](https://support.huaweicloud.com/sdk-android-devg-obs/obs_26_1002.html) | [iOS](https://support.huaweicloud.com/sdk-ios-devg-obs/obs_27_1002.html) | [PHP](https://support.huaweicloud.com/sdk-php-devg-obs/obs_28_1002.html) | [Node.js](https://support.huaweicloud.com/sdk-nodejs-devg-obs/obs_29_1002.html) |
|---|---|---|---|---|---|---|---|---|---|
   
