OPTIONS对象-OptionsObject
功能介绍
OPTIONS对象是CORS预检请求,用于检测实际跨域请求是否会被OBS允许。使用OPTIONS对象前,需要先为桶配置CORS规则,关于CORS的使用说明,请参见章节设置桶的CORS配置-SetBucketCors。
与OPTIONS桶的区别
OPTIONS对象需在URL中指定对象名,它是检查针对特定对象的跨域访问权限;OPTIONS桶提交的URL为桶域名,无需指定对象名,OPTIONS桶检查针对桶级别的跨域访问权限。两者的请求行分别为:
OPTIONS /object HTTP/1.1
OPTIONS / HTTP/1.1
URI
OPTIONS /{object_key}
请求消息样式
1 2 3 4 5 6 | 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所示。
| 消息头名称 | 是否必选 | 类型 | 描述 |
|---|---|---|---|
| Origin | 是 | String | 参数解释: 预请求指定的跨域请求Origin(通常为域名)。 约束限制: 值不能为空。 取值范围: 合法的域名格式。 默认取值: 不涉及。 |
| Access-Control-Request-Method | 是 | String | 参数解释: 实际请求可以带的HTTP方法,可以带多个方法头域。 约束限制: 值不能为空。 取值范围: GET:获取 PUT:写/改 HEAD:查询信息 POST:写/改 DELETE:删除 默认取值: 不涉及。 |
| Access-Control-Request-Headers | 否 | String | 参数解释: 实际请求可以带的HTTP头域,可以带多个头域。 约束限制: 可以带多个头域。 取值范围: 任意HTTP头域名称。 默认取值: 不涉及。 |
请求体参数(Request body)
该请求消息中不带请求体参数。
响应消息样式
1 2 3 4 5 6 7 8 9 10 | 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所示。
| 消息头名称 | 类型 | 描述 |
|---|---|---|
| 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描述。
| 错误码 | 描述 | 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 |
其余错误已包含在错误码概述中。
请求示例
1 2 3 4 5 6 7 8 | 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 |
响应示例
1 2 3 4 5 6 7 8 9 10 11 | 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 |