瀏覽器在發送跨域請求之前會發送一個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功能未開啟,則返回此錯誤碼。 |