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

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

最終更新日:Nov 09, 2025

Web サイトが Object Storage Service (OSS) からリソースを読み込むと、ブラウザが「CORS ポリシーによってブロックされました」というエラーを報告することがあります。このエラーは、Web ページが同じプロトコル、ドメイン名、ポートからのみリソースにアクセスできるように制限する、ブラウザの同一オリジンポリシーが原因です。たとえば、https://www.example.com のページは、https://example-bucket.oss-cn-hangzhou.aliyuncs.com/test.jpg のような異なるドメインの OSS リソースに直接アクセスすることはできません。imageOSS バケットにオリジン間リソース共有 (CORS) ルールを設定して、特定の Web サイトが OSS リソースにアクセスすることを安全に権限付与できます。これにより、Web ページはオブジェクトと直接やり取りできるようになります。

仕組み

CORS リクエストは、単純リクエストとプリフライトリクエストに分類されます。単純リクエストは直接送信されます。プリフライトリクエストは、メインリクエストを送信する前に、まず許可を取得する必要があります。

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

  • リクエストが GETHEAD、または POST 以外のメソッドを使用している。

  • リクエストが POST メソッドを使用し、Content-Typetext/plainapplication/x-www-form-urlencoded、または multipart/form-data 以外である。

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

ブラウザが OSS に単純リクエストを送信すると、次のプロセスが発生します。

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

  2. OSS は、リクエストの HTTP メソッドと Origin ヘッダーの値を宛先バケットの CORS 設定と比較して、一致する項目を検索します。一致が見つかった場合、OSS は応答に Access-Control-Allow-Origin ヘッダーを含めます。Access-Control-Allow-Origin ヘッダーには、最初のリクエストの Origin ヘッダーの値が含まれます。

  3. ブラウザは応答を受信し、Access-Control-Allow-Origin ヘッダーの値が元のリクエストのドメインと一致するかどうかを確認します。一致する場合、リクエストは成功します。一致しない場合、または応答に 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 サイトへのリクエストを制限します。

許可されるメソッド

GET, HEAD

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

許可されるヘッダー

空のままにする

このシナリオには、プリフライトリクエストをトリガーしない単純リクエストが含まれるため、このパラメーターは使用されません。空のままにしてください。

公開されるヘッダー

ETag, Content-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

この権限付与されたアプリケーションのみがアップロードを実行する権限を持つようにします。

許可されるメソッド

PUT, POST

PUT または POST は、アップロード操作を実行するために必要な HTTP メソッドです。

許可されるヘッダー

*

フロントエンドからの直接アップロードのセキュリティは、固定の Authorization ヘッダーではなく、セキュリティトークンサービス (STS) トークンや署名付き URL などの一時的な署名に依存します。* を使用すると、x-oss-meta-* など、SDK によって送信されるさまざまなヘッダーに対応できます。これにより、セキュリティリスクを導入することなく設定が簡素化されます。

公開されるヘッダー

ETag, x-oss-request-id

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

  • x-oss-request-id: アップロードが失敗した場合、フロントエンドはこの 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

* ワイルドカードを使用して、HTTPS プロトコルを使用する example.com の下のすべてのサブドメインを権限付与します。

許可されるメソッド

GET, PUT, POST

複数の環境にまたがるテストニーズを満たすために、リソースの読み取りとアップロードの両方を許可します。

許可されるヘッダー

*

開発中のさまざまな環境や機能では、異なるカスタムヘッダーが導入される可能性があります。* を使用すると、CORS ルールを頻繁に変更する必要がなくなります。

公開されるヘッダー

ETag, x-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

認証情報を含むリクエストの場合、オリジンは正確で信頼できるドメイン名でなければなりません。

許可されるメソッド

GET, PUT, DELETE

読み取り、更新、削除を含む、非公開リソースの完全なライフサイクル管理をサポートします。

許可されるヘッダー

authorization, content-type, x-oss-*

* を使用しないでください。必要なすべてのリクエストヘッダーを明示的にリストします。最小権限の原則に従い、不要なヘッダー情報を公開しないようにします。

公開されるヘッダー

ETag, x-oss-request-id

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

キャッシュタイムアウト

600

認証済みリクエストの場合、プリフライトキャッシュ時間を短くする (10 分) ことで、セキュリティポリシーの変更をより迅速に適用できます。

Vary: Origin ヘッダーを返す

チェック済み

CDN に、異なるオリジンに対して応答を個別にキャッシュするように指示し、混乱を避けます。

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

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

本番環境での使用

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

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

  • [オリジン (AllowedOrigin)] を正確に設定する: バケットが完全に公開されていない限り、AllowedOrigin* に設定しないでください。Web サイトのドメイン名を正確に指定します (例: https://www.example.com)。

  • [許可されるメソッド (AllowedMethod)] を制限する: ビジネスに必要な HTTP メソッドのみを公開します。Web サイトがデータの読み取りのみを必要とする場合は、GETHEAD のみを設定します。

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

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

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

  • Vary: Origin の影響を評価する: Vary: Origin を有効にすると、キャッシュ汚染の問題が解決されますが、CDN キャッシュの複雑さが増します。これにより、キャッシュヒット率が低下し、CDN back-to-origin トラフィックが増加し、追加のコストとレイテンシーが発生する可能性があります。このオプションは、十分な評価を行った後にのみ使用してください。

CDN アクセラレーションシナリオ

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

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 を取得するには、ここに ETagx-oss-request-id を追加する必要があります。

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

いいえ

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

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

Vary: Origin

いいえ

応答に Vary: Origin ヘッダーを追加するかどうかを決定します。このヘッダーは、CDN などの中間キャッシュに、リクエストの Origin ヘッダーに基づいてリソースの異なるバージョンをキャッシュするように指示します。これにより、複数のオリジンがリソースにアクセスする際のキャッシュ汚染の問題を回避できます。

  • ユースケース: オリジンに複数のドメイン名またはワイルドカードを設定する場合は、キャッシュ汚染を防ぐためにこのオプションを有効にする必要があります。

重要

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

よくある質問

エラー: リクエストされたリソースに 'Access-Control-Allow-Origin' ヘッダーが存在しません。

このエラーは通常、ブラウザが CORS ヘッダーのない古い応答をキャッシュしたか、受信リクエストに一致する CORS ルールがないために発生します。

ブラウザのキャッシュをクリアして、もう一度テストしてください。エラーが解決しない場合は、次の手順に従って CORS ルールが正しく設定されているか確認してください。

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

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

  3. 左側のナビゲーションウィンドウで、[データセキュリティ] > [CORS 設定] を選択します。

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

  5. [CORS ルールの作成] パネルで、[オリジン]* に設定し、すべての [許可されるメソッド] を選択し、[許可されるヘッダー]* に設定し、[公開されるヘッダー]ETagx-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 に設定します。これにより、リソースがクライアントにキャッシュされるのを防ぎ、すべてのリクエストがサーバーから権限付与情報を取得するようになります。

        説明

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

      • CDN を使用して OSS を高速化します。これにより、CDN によって提供されるすべてのリクエストが CORS ヘッダーを返すようになります。

    • 応答に 2 つの CORS ヘッダーが含まれているか、OSS 設定と一致しないヘッダーが含まれている場合、問題は OSS を高速化するために CDN を使用していることが原因である可能性があります。

      1. [CDN コンソール]にログインし、OSS の CDN アクセラレーションを一時的に無効にして、クロスオリジンの問題が解決したことを確認します。

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

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

  7. CORS の問題がまだ解決しない場合は、さらなるトラブルシューティングについて「OSS のオリジン間リソース共有 (CORS) の一般的なエラーと解決策」をご参照ください。

エラー: 「Access-Control-Allow-Origin」ヘッダーの値「...」が、指定されたオリジンと一致しません。

サーバーは Access-Control-Allow-Origin ヘッダーを返しましたが、その値が現在のリクエストの Origin と一致しません。これは多くの場合、キャッシュの問題です。複数の Web サイトドメイン名が OSS にアクセスするように設定した場合、ブラウザまたは CDN が 1 つの Web サイトのアクセス権限をキャッシュし、それを誤って別の Web サイトに提供することがあります。

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

エラー: プリフライトリクエストへの応答がアクセス制御チェックをパスしません: リクエストの credentials モードが「include」の場合、応答の「Access-Control-Allow-Origin」ヘッダーの値はワイルドカード「*」であってはなりません。

このエラーは、フロントエンドコードが認証情報付きのリクエストを送信し、Access-Control-Allow-CredentialsTrue であるにもかかわらず、Access-Control-Allow-Origin がワイルドカード * として設定されているために発生します。セキュリティ上の理由から、ブラウザはこの場合にワイルドカードオリジンの使用を禁止し、任意のドメインがリソースにアクセスして認証情報を取得するのを防ぎます。この情報には、Cookie や Authorization ヘッダーなどの機密データが含まれます。

  • リクエストヘッダーに Credentials 情報を含めるには、Access-Control-Allow-Origin の値をワイルドカード * から特定のドメイン名 (例: https://example.com) に変更します。

  • リクエストヘッダーに Credentials 情報を含める必要がない場合は、フロントエンドコードで xhr.withCredentialsfalse に設定し、サーバー側で Access-Control-Allow-Credentialsfalse に設定されていることを確認します。

OSS からのクロスオリジン読み込みが遅い場合、どうすれば改善できますか?

クロスオリジンリクエストは、Origin ヘッダーを含む標準の HTTP リクエストです。読み込み速度は、リクエストがクロスオリジンであるかどうかではなく、クライアントと OSS バケット間の物理的なネットワークパスに依存します。たとえば、クライアントが中国 (香港) にあり、バケットが中国本土にある場合、これは長距離アクセスと見なされます。この場合、OSS 転送アクセラレーションエンドポイントを使用してネットワークパスを最適化できます。詳細については、「転送アクセラレーション」をご参照ください。

説明

転送アクセラレーションにより、世界中のお客様が最適化されたネットワークを使用してデータを転送できます。これにより、アップロードとダウンロードの速度が大幅に向上し、さまざまなリージョンのユーザーに良好なアクセス体験が保証されます。