すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:オリジン間リソース共有 (CORS) の設定

最終更新日:May 28, 2026

ブラウザは、同一オリジンポリシーにより、Object Storage Service (OSS) へのクロスオリジンリクエストをブロックする場合があります。同一オリジンポリシーは、同じプロトコル、ドメイン、ポートへのアクセスのみを許可します。たとえば、https://www.example.com のページは、https://example-bucket.oss-cn-hangzhou.aliyuncs.com/test.jpg からリソースを読み込むことができません。image特定のウェブサイトが OSS リソースに直接アクセスできるようにするには、バケットに CORS ルールを設定してください。

仕組み

CORS リクエストには 2 つの種類があります。単純リクエスト (直接送信) と、メインリクエストの前に認可チェックが必要なプリフライトリクエストです。

次のいずれかの条件を満たす場合、プリフライトリクエストが必要です:

  • リクエストで GETHEADPOST 以外のメソッドを使用する場合。

  • リクエストで POST メソッドを使用し、Content-Typetext/plainapplication/x-www-form-urlencodedmultipart/form-data 以外の場合。

  • リクエストに、x-oss-* などのカスタムヘッダーが含まれている場合。

ブラウザが OSS に単純リクエストを送信する場合、次のプロセスが実行されます:

  1. ブラウザはリクエストに Origin ヘッダーを追加します。Origin ヘッダーは、呼び出し元ページのオリジンを指定します。例:Origin: https://www.example.com

  2. OSS は、リクエストの HTTP メソッドと Origin ヘッダーをバケットの CORS ルールと照合し、一致するルールを検索します。一致するルールが見つかった場合、OSS はレスポンスに Access-Control-Allow-Origin ヘッダーを含めます。このヘッダーの値は、最初のリクエストに含まれる Origin ヘッダーの値です。

  3. ブラウザはレスポンスを受信します。Access-Control-Allow-Origin ヘッダーが存在し、かつその値がページのオリジンと一致する場合にのみ、ブラウザはリクエストの続行を許可します。それ以外の場合、リクエストは失敗します。

プリフライトリクエストでは、単純リクエストのフローの前に次の手順が追加されます。成功した場合、単純リクエストと同じプロセスで処理が続行されます:

  1. ブラウザは、想定しているメインリクエストのメソッド (Access-Control-Request-Method) とヘッダー (Access-Control-Request-Headers) を含む OPTIONS リクエストを送信します。

  2. OSS は、CORS 設定に基づいて、リクエスト内のメソッドとヘッダーが許可されているかどうかを確認します。プリフライトリクエストに、ルールで許可されていないメソッドまたはヘッダーが含まれている場合、リクエストは失敗し、メインリクエストは送信されません。

静的 Web サイトリソースの読み込み

https://www.example.com の Web サイトでは、OSS バケットに保存されている画像、CSS、および JS ファイルを読み込む必要があります。

ステップ 1: CORS ルールの設定

OSS コンソールにログインします。 宛先バケットの [コンテンツセキュリティ] > [CORS] ページに移動し、以下のようにルールを作成します。

パラメーター

説明

オリジン

https://www.example.com

この Web サイトからのアクセスに制限します。

許可されたメソッド

GETHEAD

GET はリソースをダウンロードし、HEAD はキャッシュを検証します。

許可されたヘッダー

不要です。単純リクエストはプリフライトをトリガーしません。

公開されるヘッダー

ETagContent-Length

  • ETag を使用すると、ブラウザーは HEAD リクエストでキャッシュを検証できます。オブジェクトが変更されていない場合、サーバーは 304 Not Modified レスポンスを返し、再ダウンロードを防ぎます。

  • Content-Length は、フロントエンドでリソースの読み込み進行状況を表示するために使用できます。

キャッシュのタイムアウト (秒)

86400

プリフライト結果を 24 時間キャッシュします。

Vary: Origin

チェックなし

単一の特定のオリジンには不要です。

ステップ 2: 設定の確認

https://www.example.com にアクセスし、画像などの OSS リソースが正しく読み込まれること、およびブラウザーコンソールに CORS エラーがないことを確認します。

フロントエンドからの直接ファイルアップロード

Web ページ https://app.example.com 上のユーザーが、アバターやドキュメントなどのファイルを OSS に直接アップロードします。

ステップ 1:CORS ルールの設定

OSS コンソールにログインし、宛先バケットの [コンテンツセキュリティ] > [CORS] ページに移動して、次のようにルールを作成します。

パラメーター

説明

オリジン

https://app.example.com

この認可済みアプリケーションからのアップロードに制限します。

許可されたメソッド

PUTPOST

アップロードには PUT または POST が必要です。

許可されたヘッダー

*

直接アップロードでは、セキュリティのため、固定の Authorization ヘッダーではなく、一時的な署名 (事前署名付き URL) を使用します。* を使用すると、リスクを生じさせることなく、さまざまな SDK ヘッダー (例: x-oss-meta-*) に対応できます。

公開されるヘッダー

ETagx-oss-request-id

  • ETag:ファイルアップロード成功時の一意の識別子で、後続の検証に使用されます。

  • x-oss-request-id:アップロード失敗時のトラブルシューティングに使用されます。

キャッシュタイムアウト (秒)

600

10 分間のキャッシュにより、プリフライトリクエストの削減と迅速な設定更新のバランスが取れます。

Vary: Origin

チェックあり

マルチドメインでデプロイする場合の CDN キャッシュ汚染を防ぎます。

ステップ 2:設定の確認

https://app.example.com ページでアップロード操作を実行し、ファイルが OSS に正常にアップロードされ、ブラウザ コンソールに CORS エラーがないことを確認します。

複数環境のサポート

開発、テスト、本番環境用の複数のサブドメイン (例:dev.example.comapp.example.com) が、同じ OSS リソースにアクセスする必要があります。

ステップ 1:CORS ルールを設定する

OSS コンソールにログインします。宛先バケットの [コンテンツセキュリティ] > [CORS] ページに移動し、次のようにルールを作成します。

パラメーター

説明

オリジン

https://*.example.com

* ワイルドカードは、example.com 配下のすべての HTTPS サブドメインを許可します。

許可されたメソッド

GETPUTPOST

すべての環境での読み取りとアップロードを許可します。

許可されたヘッダー

*

* ワイルドカードは、環境ごとに異なるカスタムヘッダーを導入する際の、頻繁な CORS ルールの変更を回避します。

公開されたヘッダー

ETagx-oss-request-id

ダウンロードの検証とアップロード結果のフィードバックの両方に対応します。

キャッシュタイムアウト (秒)

3600

1 時間のキャッシュは、パフォーマンスとデバッグの柔軟性を両立させます。

Vary: Origin

選択済み

必須です。CDN に対し、Origin ごとにレスポンスをキャッシュして環境間の競合を防ぐように指示します。

ステップ 2:設定を検証する

https://dev.example.comhttps://app.example.com の両方でアクセスまたはアップロードテストを実行し、すべての操作が成功することを確認します。

認証付き API 呼び出し

https://api.example.com のフロントエンドアプリケーションでは、Authorization などのカスタムヘッダーを使用して、保護された OSS リソースにアクセスする必要があります。

ステップ 1:CORS ルールの設定

OSS コンソールにログインします。宛先バケットで、[コンテンツセキュリティ] > [CORS] ページに移動し、次のようにルールを作成します。

パラメーター

説明

オリジン

https://api.example.com

認証情報を含むリクエストの場合、オリジンは信頼できる正確なドメインである必要があります。

許可されたメソッド

GETPUTDELETE

非公開リソースの読み取り、更新、削除をサポートします。

許可されたヘッダー

authorizationcontent-typex-oss-*

* は使用しないでください。必要なヘッダーを明示的に列挙します (最小権限の原則)。

公開されるヘッダー

ETagx-oss-request-id

操作の成功を示す検証識別子と、トラブルシューティング用の ID を提供します。

キャッシュのタイムアウト (秒)

600

短いキャッシュ (10 分) により、セキュリティポリシーの変更を迅速に反映できます。

Vary: Origin

選択

CDN がオリジンごとにレスポンスを個別にキャッシュするようにします。

ステップ 2:設定の確認

https://api.example.com ページから Authorization ヘッダーを含むリクエストを開始し、保護された OSS リソースにアクセスできることを確認します。

本番環境に適用

セキュリティのベストプラクティス

最小権限の原則に従います。

  • [オリジン (AllowedOrigin)] を正確に設定するため、バケットが完全に公開されている場合を除き、Sources に * を設定するのではなく、https://www.example.com などの正確なドメインを指定してください。

  • [許可されたメソッド] の制限: アプリケーションで必要な HTTP メソッドのみを公開します。 読み取り専用サイトの場合は、 GET と HEAD のみを設定します。

  • [許可ヘッダー] を明示的に指定します。認証リクエスト (Authorization ヘッダーを含む) の場合、 * は使用せず、必要なすべてのリクエストヘッダーを明示的に列挙してください。

パフォーマンスのベストプラクティス

  • プリフライトキャッシュの最適化: 86400 秒 (24 時間) のような適切な MaxAgeSeconds 値は、プリフライトリクエストを大幅に削減し、レイテンシーとコストを低減します。

  • Vary: Origin の影響を評価してください。Vary: Origin を有効にすると、キャッシュポイズニングの問題は解決されますが、CDN のキャッシュの複雑性が増大します。これにより、キャッシュヒット率が低下し、オリジンへのトラフィック (追加のコストとレイテンシー) が増加する可能性があります。お客様のトラフィックパターンを評価した後にのみ有効にしてください。

CDN による高速化

バケットが Alibaba Cloud CDN によって高速化され、CDN ドメイン経由でアクセスされる場合、クロスオリジンリクエストは最初に CDN の POP (Point of Presence) に到達します。この場合、CORS ルールは OSS コンソールではなく、CDN コンソールで設定する必要があります。OSS の CORS 設定は、OSS オリジンドメインに直接行われるリクエストにのみ適用されます。詳細については、「クロスオリジンリソース共有 (CORS) の設定」をご参照ください。

CORS ルールのパラメーター

各バケットには、最大 20 個の CORS ルールを設定できます。OSS はルールを上から下に順次評価し、リクエストに一致する最初のルールを適用します。一致が見つかると、OSS は後続のルールをチェックしません。

パラメーター

必須

説明

オリジン (AllowedOrigin)

はい

OSS リソースへのオリジン間リクエストを許可する Web サイト (オリジンドメイン) を指定します。

  • 形式は protocol://domain[:port] です。例: https://www.example.com

  • * ワイルドカードはサポートされていますが、各オリジンで 1 回のみ使用できます。

    • 有効な例https://*.example.com または http://localhost:*

    • 不正な例https://*.example.* または https://*

  • 複数のオリジンを指定でき、1 行に 1 つずつ記述します。

許可されたメソッド (AllowedMethod)

はい

許可する HTTP メソッドを指定します。

  • 有効な値: GETPUTPOSTDELETEHEAD

  • 複数のメソッドを指定できます。

許可するヘッダー (AllowedHeader)

いいえ

プリフライトリクエストにおいて、実際のリクエストに含めることができる HTTP ヘッダーを指定します。

  • すべてのヘッダーを許可するワイルドカード文字 * がサポートされています。

  • 複数のヘッダーを指定でき、1 行に 1 つずつ記述します。ヘッダーでは大文字と小文字が区別されます。

公開ヘッダー (ExposeHeader)

いいえ

クライアント側の JavaScript からアクセスできる OSS レスポンスヘッダーを指定します。

  • * ワイルドカード文字はサポートされていません。

  • 複数のヘッダーを指定でき、1 行に 1 つずつ記述します。

  • ユースケース: JavaScript でアップロードされたファイルの ETag または x-oss-request-id を取得するには、このパラメーターに ETag と x-oss-request-id を追加します。

キャッシュの有効期間 (MaxAgeSeconds)

いいえ

ブラウザーがプリフライト OPTIONS リクエストの結果をキャッシュできる時間 (秒単位) を指定します。

  • 効果: キャッシュ期間内では、同じリソースに対する後続の同一のオリジン間リクエストは、新しいプリフライトリクエストをトリガーしないため、パフォーマンスが最適化されます。

Vary: Origin

いいえ

Vary: Origin HTTP レスポンスヘッダーを追加するかどうかを設定します。このヘッダーは、CDN やその他の中間キャッシュに対し、リクエストの Origin ヘッダーに基づいてリソースの異なるバージョンをキャッシュするように指示します。これにより、複数のオリジンが同じリソースにアクセスする際のキャッシュ汚染を防ぎます。

  • ユースケース: キャッシュ汚染を防ぐため、Sources パラメーターに複数のドメインまたはワイルドカードを設定する場合は、このオプションを有効にします。

重要

このオプションを有効にすると、CDN のキャッシュヒット率が低下する可能性があります。

よくある質問

エラー: No 'Access-Control-Allow-Origin' header is present on the requested resource.

このエラーは通常、ブラウザーが CORS ヘッダーを含まない古いレスポンスをキャッシュしているか、受信リクエストに一致する CORS ルールが存在しないことが原因です。

ブラウザーのキャッシュをクリアして再テストしてください。エラーが解消されない場合は、CORS ルールを確認してください。

  1. OSS コンソールにログインします。

  2. [バケット] をクリックし、対象バケットの名前をクリックします。

  3. 左側のナビゲーションペインで、[コンテンツセキュリティ] > [CORS] を選択します。

  4. CORS ページで、[ルールの作成] をクリックします。

  5. [CORS ルールの作成] パネルで、ソース* に設定し、すべての 許可メソッド を選択し、[許可ヘッダー]* に設定し、[公開ヘッダー]ETag および x-oss-request-id に設定し、[キャッシュの有効期間 (秒)]0 に設定し、[Vary: Origin] を選択して、[OK] をクリックします。

  6. 問題が解消されない場合は、任意のサーバーにログインして次のコマンドを実行し、オリジン間リクエストヘッダーを表示します。

    curl -v -o output_file.txt -H 'Origin:[$URL2]' '[$URL1]'
    説明
    • [URL1] は、リクエストされた OSS リソースの URL です。

    • [URL2] は、CORS ルールで設定したオリジンアドレスです。

    次のような出力が表示されます。

    • レスポンスに一致する CORS ヘッダーが含まれている場合、問題はブラウザーまたはネットワークのキャッシュにあると考えられます。以前の非 CORS リクエストがローカルにキャッシュされたため、後続のオリジン間リクエストがサーバーから新しいレスポンスを取得せずに、キャッシュされたレスポンスを取得してしまった可能性があります。次の解決策を試してください。

      • ブラウザーで [Ctrl] + [F5] キーを押してキャッシュをクリアし、問題が解消されるか確認してください。

      • CORS ルールで [キャッシュのタイムアウト (秒)] を 0 に設定してください。これにより、すべてのリクエストがサーバーから CORS 認可を再取得するようになります。

        説明

        オブジェクトをアップロードする際に、オブジェクトの cache-controlno-cache に設定できます。すでにアップロードされているオブジェクトの場合は、ossutil を使用してこの設定を変更できます。詳細については、「set-meta (オブジェクトメタデータの管理)」をご参照ください。

      • CDN を使用して OSS を高速化し、CDN 経由で配信されるすべてのリクエストに CORS ヘッダーが含まれるようにしてください。

    • レスポンスに 2 つの CORS ヘッダーが含まれている場合や、OSS の設定と一致しないヘッダーが含まれている場合は、CDN を使用した OSS の高速化が原因であると考えられます。

      1. CDN コンソールにログインし、ドメイン名の CDN アクセラレーションを一時的に無効にして、オリジン間の問題が解決されることを確認してください。

      2. 確認後、特定のドメイン名をクリックし、[キャッシュ設定] > [ノード HTTP レスポンスヘッダー] に移動します。

      3. 必要に応じてカスタム HTTP レスポンスヘッダーを設定します。

  7. CORS の問題が解決されない場合は、「OSS CORSの一般的なエラーと解決策」を参照して、さらにトラブルシューティングを行ってください。

エラー: The 'Access-Control-Allow-Origin' header has a value '...' that is not equal to the supplied origin.

サーバーが Access-Control-Allow-Origin ヘッダーを返しましたが、その値がリクエストの Origin と一致しません。これは多くの場合、キャッシュの問題です。ブラウザーまたは CDN が 1 つのドメインのレスポンスをキャッシュし、それを別のドメインに提供しています。

CORS ルールで Vary: Origin オプションを有効にして、異なる Web サイト間のキャッシュの競合を防ぐか、再試行する前にブラウザーのキャッシュをクリアしてください。

エラー: Response to preflight request doesn't pass access control check: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'.

このエラーは、フロントエンドからクレデンシャル付きリクエスト (Access-Control-Allow-CredentialsTrue) が送信された際に、Access-Control-Allow-Origin* に設定されていることが原因で発生します。ブラウザーは、Cookie や Authorization トークンなどの機密データに任意のサイトがアクセスすることを防ぐため、この組み合わせを禁止しています。

  • クレデンシャルが必要な場合は、オリジン* から特定のドメイン (例: https://example.com) に変更してください。

  • クレデンシャルが不要な場合は、フロントエンドコードで xhr.withCredentialsfalse に設定し、サーバー側で Access-Control-Allow-Credentialsfalse であることを確認してください。

OSSからのオリジン間読み込みが遅い場合、どのように改善しますか?

オリジン間読み込み速度は、クライアントと OSS バケット間のネットワークレイテンシーに依存します。オリジン間リクエストには Origin ヘッダーが含まれます。長距離アクセス (例: 中国 (香港) から中国本土) の場合は、転送アクセラレーション エンドポイントを使用してネットワークパスを最適化してください。

説明

転送アクセラレーションは、ネットワークパスを最適化し、グローバルなデータ転送速度を向上させます。