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

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

最終更新日:Sep 09, 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. ブラウザは OPTIONS リクエストを送信します。このリクエストには、実際のリクエストのメソッド (Access-Control-Request-Method) とヘッダー (Access-Control-Request-Headers) が含まれます。

  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 エラーが表示されないことを確認します。

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

https://app.example.com の Web ページのユーザーが、アバターやドキュメントなどのファイルを 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 コンソールにログインします。対象のバケットで [Content Security] > [クロスドメイン (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)] を正確に設定します。バケットが完全に公開されている場合を除き、オリジン* を設定しないでください。https://www.example.com のように、正確なドメインを指定します。

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

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

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

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

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

CDN アクセラレーション

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

CORS ルールのパラメーター

バケットごとに最大 20 個の CORS ルールを設定できます。OSS は上から順にルールを評価し、リクエストに一致した最初のルールを適用します。一致するルールが見つかった時点で、以降のルールは確認しません。

パラメーター

必須

説明

オリジン (AllowedOrigin)

はい

OSS リソースに対してクロスオリジンリクエストを実行できる Web サイト (オリジンドメイン) を指定します。

  • 形式はprotocol://domain or IP address[:port]です。例:https://www.example.com または http://192.168.1.1:8080

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

    • 有効な例https://*.example.comhttp://localhost:*、または http://192.168.1.1:8080

    • 無効な例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 ヘッダーが含まれます。長距離アクセス (例: China (Hong Kong) から中国本土) の場合は、転送アクセラレーション エンドポイントを使用してネットワークパスを最適化してください。

説明

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