PutBucketcors 操作を使用すると、指定したバケットの CORS ルールを設定できます。元のルールが存在する場合は上書きされます。
リクエスト構文
PUT /?cors HTTP/1.1
Date: GMT Date
Content-Length: ContentLength
Content-Type: application/xml
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
Authorization: SignatureValue
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>the origin you want allow CORS request from</AllowedOrigin>
<AllowedOrigin>…</AllowedOrigin>
<AllowedMethod>HTTP method</AllowedMethod>
<AllowedMethod>…</AllowedMethod>
<AllowedHeader> headers that allowed browser to send</AllowedHeader>
<AllowedHeader>…</AllowedHeader>
<ExposeHeader> headers in response that can access from client app</ExposeHeader>
<ExposeHeader>…</ExposeHeader>
<MaxAgeSeconds>time to cache pre-fight response</MaxAgeSeconds>
</CORSRule>
<CORSRule>
…
</CORSRule>
…
</CORSConfiguration >
リクエストの要素
名前 | 型 | 説明 | 必須 |
---|---|---|---|
CORSRule | container | CORS ルールのコンテナー。バケットごとに最大 10 のルールが許可されます。 親ノード: CORSConfiguration |
はい |
AllowedOrigin | string | クロスドメインリクエストが許可されているオリジンを示します。複数の要素を使用して、許可されるオリジンを複数指定できます。 各ルールでワイルドカード “*“ を 1 つ使用できます。”*“ が指定されている場合、すべてのオリジンのクロスドメインリクエストが許可されます。 親ノード: CORSRule |
はい |
AllowedMethod | enumeration (GET、PUT、DELETE、POST、HEAD) | クロスドメインリクエストで許可されるメソッドを指定します。 親ノード: CORSRule |
はい |
AllowedHeader | string | OPTIONS プリフェッチコマンドの Access-Control-Request-Headers で指定されたヘッダーを許可するかどうかを制御します。Access-Control-Request-Headers で指定された各ヘッダーが AllowedHeader の値と一致している必要があります。各ルールでワイルドカード “*“ を 1 つ使用できます。 親ノード: CORSRule |
いいえ |
ExposeHeader | string | 応答ヘッダーを指定して、ユーザーがアプリケーション (Javascript の XMLHttpRequest オブジェクトなど) からアクセスできるようにします。 ワイルドカード “*“ は使用できません。 親ノード: CORSRule |
いいえ |
MaxAgeSeconds | integer | 特定のリソースに対するブラウザープリフェッチ (OPTIONS) リクエストの結果のキャッシュ期間を指定します。単位は秒です。 CORSRule ごとに 1 つ指定できます。 親ノード: CORSRule |
いいえ |
CORSConfiguration | container | バケットの CORS ルールのコンテナー。 親ノード: なし |
はい |
詳細分析
- デフォルトでは、CORS はバケットで無効になっており、 すべてのクロスドメインリクエストのオリジンが禁止されます。
- アプリケーションで CORS を使用するには (ブラウザーの XMLHttpRequest 機能を使用して www.a.com から OSS にアクセスする場合など)、このインターフェイスを使用して手動で CORS ルールをアップロードして、CORS を有効にする必要があります。このルールは XML ドキュメントに記述します。
- 各バケットの CORS 設定は複数の CORS ルールによって指定されます。バケットごとに最大 10 のルールが許可されます。アップロードする XML ドキュメントはサイズが 16 KB 以下である必要があります。
- OSS は、クロスドメインリクエスト (または OPTIONS リクエスト) を受信すると、バケットの CORS ルールを読み取り、関連する権限を確認します。各ルールを順番に調べて、最初に一致したルールを使用してリクエストを承認し、対応するヘッダーを返します。一致するルールがない場合、CORS ヘッダーは含まれません。
- CORS ルールに一致するには 3 つの条件を満たしている必要があります。まず、リクエストの Origin が AllowedOrigin と一致している必要があります。次に、リクエストのメソッド (GET、PUT など) や、OPTIONS リクエストの Access-Control-Request-Method ヘッダーに対応するメソッドが、AllowedMethod と一致している必要があります。最後に、OPTIONS リクエストの Access-Control-Request-Headers に含まれている各ヘッダーが AllowedHeader と一致している必要があります。
- Content-MD5 リクエストヘッダーをアップロードした場合は、本文の Content-MD5 が計算されて、両者が同じであるかどうかが確認されます。異なる場合は、エラーコード InvalidDigest が返されます。
例
バケットの CORS ルールを追加する例:
PUT /?cors HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Content-Length: 186
Date: Fri, 04 May 2012 03:21:12 GMT
Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:KU5h8YMUC78M30dXqf3JxrTZHiA=
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>http://www.a.com</AllowedOrigin>
<AllowedOrigin>http://www.b.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedHeader> Authorization</AllowedHeader>
<ExposeHeader>x-oss-test</ExposeHeader>
<ExposeHeader>x-oss-test1</ExposeHeader>
<MaxAgeSeconds>100</MaxAgeSeconds>
</CORSRule>
</CORSConfiguration >
レスポンスの例:
HTTP/1.1 200 OK
x-oss-request-id: 50519080C4689A033D00235F
Date: Fri, 04 May 2012 03:21:12 GMT
Content-Length: 0
Connection: keep-alive
Server: AliyunOSS