瀏覽器在發送跨域請求之前會發送一個preflight請求(OPTIONS)並帶上特定的來源域,HTTP方法和header資訊等給OSS以決定是否發送真正的請求。

OSS可以通過Put Bucket cors介面來開啟Bucket的CORS支援,開啟CORS功能之後,OSS在收到瀏覽器preflight請求時會根據設定的規則評估是否允許本次請求。如果不允許或者CORS功能沒有開啟,返回403 Forbidden。

請求文法

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

請求Header

名稱 類型 描述
Origin 字元串 請求來源域,用來標示跨域請求。

預設值:無

Access-Control-Request-Method 字元串 表示在實際請求中將會用到的方法。

預設值:無

Access-Control-Request-Headers 字元串 表示在實際請求中會用到的除了簡單頭部之外的headers。

預設值:無

響應Header

名稱 類型 描述
Access-Control-Allow-Origin 字元串 請求中包含的Origin,如果不允許的話將不包含該頭部。
Access-Control-Allow-Methods 字元串 允許請求的HTTP方法,如果不允許該請求,則不包含該頭部。
Access-Control-Allow-Headers 字元串 允許請求攜帶的header的列表,如果請求中有不被允許的header,則不包含該頭部,請求也將被拒絕。
Access-Control-Expose-Headers 字元串 允許在客戶端JavaScript程式中訪問的headers的列表。
Access-Control-Max-Age 整型 允許瀏覽器緩存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-test

返回樣本:

HTTP/1.1 200 OK 
x-oss-request-id: 5051845BC4689A033D0022BC
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-test
Connection: keep-alive
Content-Length: 0  
Server: AliyunOSS