PUT Bucket CORS
更新時間 2024-11-07 18:15:44
最近更新時間: 2024-11-07 18:15:44
分享文章
本節主要介紹PUT Bucket CORS。
此操作用來設置Bucket的跨域資源共享(Cross-Origin Resource Sharing,CORS)。瀏覽器限制腳本內發起跨源HTTP請求,即同源策略。例如,當來自于A網站的頁面中的JavaScript代碼希望訪問B網站的時候,瀏覽器會拒絕該訪問,因為A、B兩個網站是屬于不同的域。通過配置CORS,可以解決不同域相互訪問的問題,CORS定義了客戶端Web應用程序在一個域中與另一個域中的資源進行交互的方式。
以下是有關使用CORS的示例場景:
- 場景 1:比如用戶的網站www.exam***ple.com,后端使用了OOS。在web應用中提供了使用JavaScript實現的上傳文件功能,但是在該web應用中,只能向www.exam***ple.com發送請求,向其他網站發送的請求都會被瀏覽器拒絕。這樣就導致用戶上傳的數據必須從www.exam***ple.com中轉。如果設置了跨域訪問的話,用戶就可以直接上傳到OOS,而無需從www.exam***ple.com中轉。
- 場景2:假設用戶在名為example-bucket的Bucket中托管網站,網站的Endpoint是//example-bucket.oos-website-cn.oos-xx.ctyunapi.cn。現在,用戶想要使用網頁上的JavaScript (存儲在此Bucket中),通過OOS API Endpoint oos-xx.ctyunapi.cn向Bucket發送GET 和 PUT 請求。瀏覽器通常會阻止 JavaScript 發送這些請求,但借助CORS,用戶可以配置Bucket支持來自example-bucket.oos-website-cn.oos-xx.ctyunapi.cn 的跨域請求。
設置Bucket的跨域請求。如果配置已經存在,OOS會覆蓋它。只有根用戶和擁有PUT Bucket CORS權限的子用戶才能執行此操作,否則會返回403 AccessDenied錯誤。在配置跨域請求時,用戶可以通過XML來配置允許跨域的源和HTTP方法。XML請求體不能超過64KiB。
OOS收到來自瀏覽器的預檢請求后,它將為Bucket評估CORS配置,并使用第一個與瀏覽器請求相匹配的CORSRule規則來實現跨域請求。要使規則實現匹配,必須滿足以下條件:
- 請求的Origin標頭必須匹配一個AllowedOrigin 元素。
- 請求方法(例如,GET 或 PUT),或者預檢 OPTIONS請求中的Access-Control-Request-Method請求頭,必須是某個AllowedMethod 元素。
- 在預檢請求中,Access-Control-Request-Headers請求頭中列出的每個請求頭,必須匹配一個AllowedHeader 元素。
請求語法
PUT /?cors HTTP/1.1
Host: BucketName.oos-cn.ctyunapi.cn
Content-Length: length
Date: date
Authorization: SignatureValue
Content-MD5: MD5
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>Origin you want to allow cross-domain requests from</AllowedOrigin>
<AllowedOrigin>...</AllowedOrigin>
...
<AllowedMethod>HTTP method</AllowedMethod>
<AllowedMethod>...</AllowedMethod>
...
<MaxAgeSeconds>Time in seconds your browser to cache the pre-flight OPTIONS response for a resource</MaxAgeSeconds>
<AllowedHeader>Headers that you want the browser to be allowed to send</AllowedHeader>
<AllowedHeader>...</AllowedHeader>
...
<ExposeHeader>Headers in the response that you want accessible from client application</ExposeHeader>
<ExposeHeader>...</ExposeHeader>
...
</CORSRule>
<CORSRule>
...
</CORSRule>
</CORSConfiguration>
請求參數
| 名稱 | 描述 | 是否必須 |
|---|---|---|
| BucketName | 存儲桶名稱。 | 是 |
| CORSConfiguration | 最多包含100個CORSRule元素的容器。 類型:容器。 子節點:CORSRule。 |
是 |
| CORSRule | 用戶允許跨域的源和方法。 類型:容器。 子節點:AllowedOrigin、AllowedMethod、AllowedHeader、MaxAgeSeconds、ExposeHeader、ID。 父節點:CORSConfiguration。 |
是 |
| ID | 規則的唯一標識。最長255個字符。 類型:字符串。 父節點:CORSRule。 |
否 |
| AllowedMethod | 允許跨域的HTTP方法。每個CORSRule應至少包含一個源和一個方法。 類型: 枚舉 (GET, PUT, HEAD, POST, DELETE)。 父節點:CORSRule。 |
是 |
| AllowedOrigin | 允許跨域的源。每個CORSRule應至少包含一個源和一個方法。 可以包含通配符*,但最多只能包含一個,比如://*.daliqc.cn。用戶也可以只指定 * 表示允許所有源跨域訪問。 類型:字符串。 父節點:CORSRule。 |
是 |
| AllowedHeader | 控制在預檢OPTIONS請求中Access-Control-Request-Headers頭中指定的header是否允許。Access-Control-Request-Headers 中的每個請求頭名稱,必須在規則中有匹配的條目。 規則中的每個 AllowedHeader最多可以包含一個 * 通配符字符。例如,x-amz-*。 類型:字符串。 父節點:CORSRule。 |
否 |
| MaxAgeSeconds | 指定瀏覽器對特定資源的預檢(OPTIONS)請求返回結果的緩存時間,單位為秒。通過緩存響應,在需要重復原始請求時,瀏覽器無需向 OOS 發送預檢請求。 一個CORSRule最多包含一個MaxAgeSeconds元素。 類型:整型。 取值:大于等于-1的整數。-1表示禁用緩存。 父節點:CORSRule。 |
否 |
| ExposeHeader | 指定客戶應用程序(例如,JavaScript XMLHttpRequest文件)能夠訪問的響應頭。 類型:字符串。 父節點: CORSRule。 |
否 |
請求示例
第一個規則允許來自//docs.oos-cn.ctyunapi.cn源的跨源 PUT、POST和DELETE請求。該規則還通過Access-Control-Request-Headers標頭允許預檢OPTIONS請求中的所有標頭。作為對任何預檢 OPTIONS 請求的響應,OOS 將返回請求的任意請求頭。
第二個規則允許與第一個規則具有相同的跨源請求,但第二個規則應用于另一個源 //example.bucket.oos-cn.ctyunapi.cn。
第三個規則允許來自所有源的跨源GET請求。“*”通配符字符是指所有的源。
PUT?/?cors?HTTP/1.1
Host:?example-bucket.oos-cn.ctyunapi.cn
x-amz-date:?Tue,?21?Aug?2012?17:54:50?GMT
Content-MD5:?8dYiLewFWZyGgV2Q5FNI4W==
Authorization: SignatureValue
Content-Length:?445
?
<CORSConfiguration>
?<CORSRule>
???<AllowedOrigin>//docs.oos-cn.ctyunapi.cn</AllowedOrigin>
?
???<AllowedMethod>PUT</AllowedMethod>
???<AllowedMethod>POST</AllowedMethod>
???<AllowedMethod>DELETE</AllowedMethod>
?
???<AllowedHeader>*</AllowedHeader>
?</CORSRule>
?<CORSRule>
???<AllowedOrigin>//example.bucket.oos-cn.ctyunapi.cn</AllowedOrigin>
?
???<AllowedMethod>PUT</AllowedMethod>
???<AllowedMethod>POST</AllowedMethod>
???<AllowedMethod>DELETE</AllowedMethod>
?
???<AllowedHeader>*</AllowedHeader>
?</CORSRule>
?<CORSRule>
???<AllowedOrigin>*</AllowedOrigin>
???<AllowedMethod>GET</AllowedMethod>
?</CORSRule>
</CORSConfiguration>
響應示例
HTTP/1.1 200 OK
x-amz-request-id: 8859db542a32455738b2b4abadb3727479686a6c6e70727476
Date: Tue, 21 Aug 2012 17:54:50 GMT
Server:CTYUN