浏览器在发送跨域请求之前会发送一个preflight请求(Options)给OSS,并带上特定的来源域、HTTP方法和header等信息,以决定是否发送真正的请求。Options请求是由浏览器自动根据是否跨域来决定是否发送。

请求语法

OPTIONS /ObjectName HTTP/1.1
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
Origin:Origin
Access-Control-Request-Method:HTTP method
Access-Control-Request-Headers:Request Headers

请求头

名称 类型 是否必选 示例值 描述
Origin 字符串 http://www.example.com 请求来源域,用于标识跨域请求。

在实际请求中只能设置一个该请求头。

默认值:无

Access-Control-Request-Method 字符串 PUT 在实际请求中会用到的方法。

在实际请求中只能设置一个该请求头。

默认值:无

Access-Control-Request-Headers 字符串 x-oss-test1,x-oss-test2 在实际请求中会用到的除了简单头部之外的header。

在实际请求中可以为该请求头设置多个header,多个header之间使用英文逗号(,)隔开。

默认值:无

响应头

名称 类型 示例值 描述
Access-Control-Allow-Origin 字符串 http://www.example.com 请求中包含的Origin。如果不允许该请求,则响应头不包含该头部。
Access-Control-Allow-Methods 字符串 PUT 允许请求的HTTP方法。如果不允许该请求,则响应头不包含该头部。
Access-Control-Allow-Headers 字符串 x-oss-test,x-oss-test1 允许请求携带的header的列表。如果请求中有不被允许的header,则不包含该头部,请求也将被拒绝。
Access-Control-Expose-Headers 字符串 x-oss-test1,x-oss-test2 允许在客户端JavaScript程序中访问的headers的列表。
Access-Control-Max-Age 整型 60 允许浏览器缓存preflight结果的时间,单位为秒。

示例

请求示例

OPTIONS /testobject HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com  
Date: Fri, 24 Feb 2012 05:45:34 GMT  
Origin:http://www.example.com
Access-Control-Request-Method:PUT
Access-Control-Request-Headers:x-oss-test1,x-oss-test2

返回示例

HTTP/1.1 200 OK 
x-oss-request-id: 5051845BC4689A033D00****
Date: Fri, 24 Feb 2012 05:45:34 GMT
Access-Control-Allow-Origin: http://www.example.com
Access-Control-Allow-Methods: PUT
Access-Control-Expose-Headers: x-oss-test1,x-oss-test2
Connection: keep-alive
Content-Length: 0  
Server: AliyunOSS

错误码

错误码 HTTP 状态码 描述
AccessForbidden 403 OSS可以通过PutBucketCORS接口来开启Bucket的CORS功能。开启CORS功能后,OSS在收到浏览器preflight请求时会根据设定的规则评估是否允许本次请求,如果不允许或者CORS功能未开启,则返回此错误码。