OPTIONS桶
功能介绍
OPTIONS,称为预请求,是客户端发送给服务端的一种请求,通常被用于检测客户端是否具有对服务端进行操作的权限。只有当预请求成功返回,客户端才开始执行后续的请求。
OBS允许在桶内保存静态的网页资源,在正确的使用下,OBS的桶可以成为网站资源。在这种使用场景下,OBS中的桶作为服务端,需要处理客户端发送的OPTIONS预请求。
要处理OPTIONS,OBS的桶必须已经配置CORS,关于CORS的使用说明,请参见章节 设置桶的CORS配置。
与OPTIONS对象的区别
OPTIONS对象需在URL中指定对象名;OPTIONS桶提交的URL为桶域名,无需指定对象名。两者的请求行分别为:
OPTIONS /object HTTP/1.1
OPTIONS / HTTP/1.1
请求消息样式
1 2 3 4 5 6 |
OPTIONS / HTTP/1.1 Host: bucketname.obs.region.example.com Date: date Authorization: authorization Origin: origin Access-Control-Request-Method: method |
请求消息参数
该请求消息中不使用消息参数。
请求消息头
该请求使用的消息头如下表1所示。
请求消息元素
该请求消息中不使用消息元素。
响应消息样式
1 2 3 4 5 6 7 8 9 |
HTTP/1.1 status_code Content-Type: application/xml Access-Control-Allow-Origin: origin Access-Control-Allow-Methods: method Access-Control-Allow-Header: header Access-Control-Max-Age: time Access-Control-Expose-Headers: header Date: date Content-Length: length |
响应消息头
该响应使用的消息头如下表2所示。
消息头名称 |
描述 |
---|---|
Access-Control-Allow-Origin |
如果请求的Origin满足服务端的CORS配置,则在响应中包含这个Origin。 类型:String |
Access-Control-Allow-Headers |
如果请求的headers满足服务端的CORS配置,则在响应中包含这个headers。 类型:String |
Access-Control-Max-Age |
服务端CORS配置中的MaxAgeSeconds。 类型:Integer |
Access-Control-Allow-Methods |
如果请求的Access-Control-Request-Method满足服务端的CORS配置,则在响应中包含这条rule中的Methods。 类型:String 有效值:GET、PUT、HEAD、POST 、DELETE |
Access-Control-Expose-Headers |
服务端CORS配置中的ExposeHeader。 类型:String |
响应消息元素
该请求的响应消息中不带消息元素。
错误响应消息
此请求可能的特殊错误如下表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 evalution of Origin, request method / Access-Control-Request-Method or Access-Control-Requet-Headers are not whitelisted by the resource's CORS spec. 桶配置了CORS,OPTIONS桶时,Origin、method、Headers与任一rule匹配不上。 |
403 Forbidden |
其余错误已经包含在表2中。
请求示例
1 2 3 4 5 6 7 8 |
OPTIONS / HTTP/1.1 User-Agent: curl/7.29.0 Host: examplebucket.obs.region.example.com Accept: */* Date: WED, 01 Jul 2015 04:02:15 GMT Authorization: OBS H4IPJX0TQTHTHEBQQCEC:7RqP1vjemo6U+Adv9/Y6eGzWrzA= 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: BF260000016436314E8FF936946DBC9C 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: 32AAAQAAEAABAAAQAAEAABAAAQAAEAABCTlYimJvOyJncCLNm5y/iz6MAGLNxTuS Date: WED, 01 Jul 2015 04:02:15 GMT Content-Length: 0 |