
# OPTIONS对象-OptionsObject
#### 功能介绍
OPTIONS对象是CORS预检请求，用于检测实际跨域请求是否会被OBS允许。使用OPTIONS对象前，需要先为桶配置CORS规则，关于CORS的使用说明，请参见章节[设置桶的CORS配置-SetBucketCors](https://support.huaweicloud.com/api-obs/obs_04_0074.html)。
#### 与OPTIONS桶的区别
OPTIONS对象需在URL中指定对象名，它是检查针对特定对象的跨域访问权限；OPTIONS桶提交的URL为桶域名，无需指定对象名，OPTIONS桶检查针对桶级别的跨域访问权限。两者的请求行分别为：
```
OPTIONS /object HTTP/1.1
```
```
OPTIONS / HTTP/1.1
```
#### URI
OPTIONS /{*object_key*}
#### 调用方法
请参见[如何调用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=CheckObjectOptions)在线调试接口。
#### 请求消息样式
```
OPTIONS /object HTTP/1.1 
Host: bucketname.obs.cn-north-4.myhuaweicloud.com 
Date: date
Authorization: authorization
Origin: origin
Access-Control-Request-Method: method
```
其中有关Authorization，在使用API Explorer或curl调试时需要携带该头域，浏览器发起的CORS预检请求不需要。
#### URI参数（URI Parameters）
该请求消息中不使用消息参数。
#### 请求头参数（Request headers）
该请求使用的消息头如下[表1]所示。
 表1OPTIONS请求头参数（Request headers） 
| 消息头名称                          | 是否必选 | 类型     | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
|:---|:---|:---|:---|
| Origin                         | 是    | String | **参数解释：** 预请求指定的跨域请求Origin（通常为域名）。 **约束限制：** 值不能为空。 **取值范围：** 合法的域名格式。 **默认取值：** 不涉及。                                                                                                                                                                                                       |
| Access-Control-Request-Method  | 是    | String | **参数解释：** 实际请求可以带的HTTP方法，可以带多个方法头域。 **约束限制：** 值不能为空。 **取值范围：** GET：获取 PUT：写/改 HEAD：查询信息 POST：写/改 DELETE：删除 **默认取值：** 不涉及。 |
| Access-Control-Request-Headers | 否    | String | **参数解释：** 实际请求可以带的HTTP头域，可以带多个头域。 **约束限制：** 可以带多个头域。 **取值范围：** 任意HTTP头域名称。 **默认取值：** 不涉及。                                                                                                                                                                                                  |
   
#### 请求体参数（Request body）
该请求消息中不带请求体参数。
#### 响应消息样式
```
HTTP/1.1 status_code
Content-Type: type
Access-Control-Allow-Origin: origin
Access-Control-Allow-Methods: method
Access-Control-Allow-Headers: header
Access-Control-Max-Age: time
Access-Control-Expose-Headers: header
Access-Control-Allow-Credentials: credentials
Date: date
Content-Length: length
```
#### 响应头 (Response Headers)
该请求使用的消息头如下[表2]所示。
 表2CORS响应头参数（Request headers） 
| 消息头名称                            | 类型      | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                 |
|:---|:---|:---|
| Access-Control-Allow-Origin      | String  | **参数解释：** 如果请求的Origin满足服务端的CORS配置，则在响应中包含这个Origin。 **取值范围：** 不涉及。                                                                                                                                                                                                                                           |
| Access-Control-Allow-Headers     | String  | **参数解释：** 如果请求的headers满足服务端的CORS配置，则在响应中包含这个headers。 **取值范围：** CORS配置中允许的Headers。                                                                                                                                                                                                                        |
| Access-Control-Max-Age           | Integer | **参数解释：** 服务端CORS配置中的MaxAgeSeconds。 **取值范围：** 秒数，正整数。                                                                                                                                                                                                                                                  |
| Access-Control-Allow-Methods     | String  | **参数解释：** 如果请求的Access-Control-Request-Method满足服务端的CORS配置，则在响应中包含这条rule中的Methods。 **取值范围：** GET：获取 PUT：写/改 HEAD：查询信息 POST：写/改 DELETE：删除 |
| Access-Control-Expose-Headers    | String  | **参数解释：** 服务端CORS配置中的ExposeHeader。 **取值范围：** 自定义响应头名称。                                                                                                                                                                                                                                                    |
| Access-Control-Allow-Credentials | String  | **参数解释：** 是否允许前端请求携带并暴露用户的身份凭证（如 Cookies、HTTP 认证信息或客户端 SSL 证书）给跨域的服务器。 **取值范围：** true：允许携带凭证。 false：不允许携带凭证。                                                                                                                                                     |
   
#### 响应体 (Response Body)
该请求的响应消息中不带消息元素。
#### 错误响应消息
此请求可能的特殊错误如下[表3]描述。
 表3特殊错误 
| 错误码             | 描述                                                                                                                                                                                                                                                                                                                            | HTTP状态码        |
|:---|:---|:---|
| Bad Request     | Invalid Access-Control-Request-Method: null 桶配置了CORS，OPTIONS对象时，没有加入method头域。                                                                                                                                                                                                             | 400 BadRequest |
| Bad Request     | Insufficient information. Origin request header needed. 桶配置了CORS，OPTIONS对象时，没有加入origin头域。                                                                                                                                                                                                  | 400 BadRequest |
| AccessForbidden | CORSResponse: This CORS request is not allowed. This is usually because the evaluation of Origin, request method / Access-Control-Request-Method or Access-Control-Request-Headers are not whitelisted by the resource's CORS spec. 桶配置了CORS，OPTIONS对象时，Origin、method、Headers与任一rule匹配不上。 | 403 Forbidden  |
   
其余错误已包含在[错误码概述](https://support.huaweicloud.com/api-obs/obs_04_0115.html)中。
#### 请求示例
```
OPTIONS /object_1 HTTP/1.1
User-Agent: curl/7.29.0
Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
Accept: */*
Date: Wed, 01 Jul 2015 04:02:19 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:bQZG9c2aokAJsHOOkuVBK6cHZZQ=
Origin: www.example.com
Access-Control-Request-Method: PUT
```
#### 响应示例
```
HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: BF26000001643632D12EFCE1C1294555
Access-Control-Allow-Origin: www.example.com
Access-Control-Allow-Methods: POST,GET,HEAD,PUT,DELETE
Access-Control-Max-Age: 100
Access-Control-Expose-Headers: ExposeHeader_1,ExposeHeader_2
Access-Control-Allow-Credentials: true
x-obs-id-2: 32AAAQAAEAABAAAQAAEAABAAAQAAEAABCS+DXV4zZetbTqFehhEcuXywTa/mi3T3
Date: Wed, 01 Jul 2015 04:02:19 GMT
Content-Length: 0
```
