瀏覽器在發送跨域請求之前會發送一個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