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