Object Storage Service (OSS) バケットのオリジン間リソース共有 (CORS) ルールを構成します。
使用上の注意
デフォルトで無効化された設計
デフォルトでは、バケットに対して CORS は無効になっています。すべてのクロスオリジンリクエストは許可されていません。
上書きメカニズム
同一の既存の CORS ルールを持つバケットに対して PutBucketCors オペレーションを呼び出して新しい CORS ルールを構成すると、既存のルールは上書きされます。
アプリケーションでの CORS の使用
アプリケーションで CORS を使用するには、PutBucketCors オペレーションを呼び出して CORS を有効にする CORS ルールを構成する必要があります。
たとえば、
example.comがブラウザのXMLHttpRequestを使用して OSS にアクセスできるようにするには、このオペレーションを呼び出して XML で CORS ルールを構成する必要があります。CORS ルールの一致
OSS がバケット宛てのクロスオリジンリクエストまたは OPTIONS リクエストを受信すると、OSS はバケットに構成されている CORS ルールを読み取り、ルールを 1 つずつ照合しようとします。 OSS が最初の一致を見つけると、OSS は対応するヘッダーを返します。 リクエストが CORS ルールのいずれにも一致しない場合、OSS はレスポンスに CORS ヘッダーを含めません。
OSS は、クロスオリジンリクエストまたは OPTIONS リクエストが次の条件を満たす場合にのみ、CORS ルールに一致すると見なします。
クロスオリジンリクエストが送信されたオリジンが、CORS ルールの 1 つの
AllowedOrigin要素の値と一致します。リクエストメソッド (GET や PUT など) または OPTIONS リクエストの
Access-Control-Request-Methodヘッダーに対応するメソッドは、1 つのAllowedMethod項目と一致する必要があります。OPTIONS リクエストの
Access-Control-Request-Headersに含まれる各ヘッダーは、CORS ルールの 1 つのAllowedHeader要素の値と一致する必要があります。
権限
デフォルトで、Alibaba Cloud アカウントはすべての権限を持っています。 Alibaba Cloud アカウント配下の RAM ユーザーまたは RAM ロールは、デフォルトでは権限がありません。 Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーを使用して操作権限を付与する必要があります。
API | アクション | 定義 |
PutBucketCors | oss: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> // CORS リクエストを許可するオリジン
<AllowedOrigin>…</AllowedOrigin>
<AllowedMethod>HTTP method</AllowedMethod> // HTTP メソッド
<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 | コンテナー | はい | N/A | CORS ルールを格納するコンテナー。 1 つのバケットに対して最大 20 個の CORS ルールを構成できます。 リクエストの XML メッセージ本文のサイズは最大 16 KB です。 親ノード: CORSConfiguration |
AllowedOrigin | 文字列 | はい | * | クロスオリジンリクエストが許可されるオリジン。 複数の要素を使用して、複数の許可されたオリジンを指定できます。 AllowedOrigin のワイルドカードとしてアスタリスク (*) を 1 つだけ使用できます。 AllowedOrigin をアスタリスク (*) に設定すると、すべてのクロスオリジンリクエストが許可されます。 親ノード: CORSRule |
AllowedMethod | 列挙型 | はい | GET | 許可されるクロスオリジンリクエストメソッド。 有効な値: GET、PUT、DELETE、POST、HEAD。 親ノード: CORSRule |
AllowedHeader | 文字列 | いいえ | Authorization | OPTIONS プリフライトリクエストの
重要 AllowedHeader のワイルドカードとしてアスタリスク (*) を 1 つだけ使用できます。 次の文字はサポートされていません。
親ノード: CORSRule |
ExposeHeader | 文字列 | いいえ | x-oss-test | JavaScript の XMLHttpRequest オブジェクトなど、アプリケーションからの許可されたアクセスリクエストのレスポンスヘッダー。 重要 次の文字はサポートされていません。
親ノード: CORSRule |
MaxAgeSeconds | 整数 | いいえ | 100 | ブラウザが指定されたリソースに対する OPTIONS プリフライトリクエストへのレスポンスをキャッシュできる期間。 単位: 秒。 CORS ルールには MaxAgeSeconds 要素を 1 つだけ指定できます。 親ノード: CORSRule |
CORSConfiguration | コンテナー | はい | N/A | バケットの CORS 構成を格納するコンテナー。 親ノード: なし |
ResponseVary | ブール値 | いいえ | false | Vary: Origin ヘッダーを返すかどうかを指定します。 有効な値:
重要 この要素は、少なくとも 1 つの CORS ルールが構成されている場合にのみ有効です。 |
この操作の共通リクエストヘッダーの詳細については、「共通 HTTP ヘッダー」をご参照ください。
レスポンスヘッダー
PutBucketCors リクエストへのレスポンスには、共通レスポンスヘッダーのみが含まれます。 詳細については、「共通 HTTP ヘッダー」をご参照ください。
例
リクエスト例
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: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=content-length,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e <?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration> <CORSRule> <AllowedOrigin>*</AllowedOrigin> <AllowedMethod>PUT</AllowedMethod> <AllowedMethod>GET</AllowedMethod> <AllowedHeader>Authorization</AllowedHeader> </CORSRule> <CORSRule> <AllowedOrigin>http://example.com</AllowedOrigin> <AllowedOrigin>http://example.net</AllowedOrigin> <AllowedMethod>GET</AllowedMethod> <AllowedHeader> Authorization</AllowedHeader> <ExposeHeader>x-oss-test</ExposeHeader> <ExposeHeader>x-oss-test1</ExposeHeader> <MaxAgeSeconds>100</MaxAgeSeconds> </CORSRule> <ResponseVary>false</ResponseVary> </CORSConfiguration >レスポンス例
HTTP/1.1 200 OK x-oss-request-id: 50519080C4689A033D0***** Date: Fri, 04 May 2012 03:21:12 GMT Content-Length: 0 Connection: keep-alive Server: AliyunOSS x-oss-server-time: 94
SDK
次のプログラミング言語の OSS SDK を使用して、PutBucketCors オペレーションを呼び出すことができます。
ossutil
PutBucketCors オペレーションに対応する ossutil コマンドについては、「put-bucket-cors」をご参照ください。
エラーコード
エラーコード | HTTP ステータスコード | 説明 |
InvalidDigest | 400 | リクエスト本文に基づいて OSS によって計算された Content-MD5 値が、リクエストヘッダーで指定された Content-MD5 値と異なります。 |