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

Object Storage Service:CORSルールの設定後にOSSを呼び出すと、「No 'Access-Control-Allow-Origin' 」エラーが発生しません。

最終更新日:Feb 23, 2024

問題の説明

クロスオリジンアクセスを有効にし、オリジン間のデータ転送のセキュリティを確保するには、Object Storage Service (OSS) コンソールでクロスオリジンリソース共有 (CORS) ルールを設定します。 ただし、OSS SDKを使用してプログラムを呼び出すと、次のエラーが報告されます。

要求されたリソースに「Access-Control-Allow-Origin」ヘッダーが存在しません

原因

次のセクションでは、考えられる原因について説明します。

  • CORSルールの設定が正しくありません。

  • ブラウザのキャッシュは読み取られますが、キャッシュにはCORSルールで指定されたレスポンスヘッダーが含まれていません。

解決策

ブラウザのキャッシュをクリアします。 次に、クロスオリジンリクエストを開始して、エラーが続くかどうかを確認します。 エラーが解決しない場合は、次の手順を実行して、CORSルールが正しく設定されているかどうかを確認します。

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

  2. 左側のナビゲーションウィンドウで、[バケット] をクリックします。 表示されるページで、管理するバケットの名前をクリックします。

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

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

  5. では、ルールの作成パネル、セットソース*のすべてのオプションを選択します。許可メソッド、セットヘッダーを許可する*,露出ヘッダーETagx-oss-request-id、およびキャッシュのタイムアウト (秒)0、選択Vary: 起源をクリックし、OK. 詳細については、「CORSの設定」をご参照ください。

    説明

    [Vary: Origin] を選択すると、ローカルキャッシュエラーは防止されますが、ブラウザからのリクエストまたはCDN back-to-originリクエストの数が増加する可能性があります。

    image

  6. 上記の手順を実行してもエラーが発生しない場合は、サーバーにログインして次のコマンドを実行し、クロスオリジンリクエストヘッダーを表示します。

    curl -voa '[$URL1]' -H 'Origin:[$URL2]'
    説明
    • [$URL1] は、要求されるOSSオブジェクトのURLです。

    • [$URL2] は、設定したソースの値です。

    次の図は、サンプル出力を示しています。

    • 出力にCORSルールの設定と一致するCORSヘッダーが含まれている場合、キャッシュが原因でエラーが発生する可能性があります。 これは、最初のリクエストがクロスオリジンリクエストではなく、返されたデータがローカルにキャッシュされていることを示します。 次に、クロスオリジンアクセスをトリガーする2番目のリクエストは、ローカルキャッシュから直接データを取得します。 この場合、クロスオリジン検証は失敗します。 この問題を解決するには、次のいずれかの方法を使用します。

      • ブラウザページで、[Ctrl] + [F5] をクリックしてブラウザのキャッシュをクリアします。 次に、クロスオリジンリクエストを開始して、エラーが続くかどうかを確認します。

      • CORSルールのキャッシュタイムアウト (秒) を0に設定します。 これにより、リソースがクライアントでキャッシュされなくなります。 このようにして、認証情報は、各要求についてサーバから取得される。

        説明

        ファイルをOSSにアップロードするときは、ファイルのcache-controlをno-cacheに設定します。 すでにアップロードされているファイルについては、ossutilを使用して設定を変更できます。 cache-controlの設定方法については、 set-meta (オブジェクトメタデータの管理)

      • Alibaba Cloud CDNを使用してOSSへのアクセスを高速化します。 このようにして、要求ごとにCORSヘッダーが返されます。

    • 出力に2つのCORSヘッダーが含まれている場合、またはCORSヘッダーがCORSルールで設定したヘッダーに含まれていない場合、エラーはAlibaba Cloud CDNの使用が原因である可能性があります。 この場合、次の手順を実行します。

      1. Alibaba Cloud CDNコンソールにログインし、OSSのCDNを一時的に無効にします。 次に、クロスオリジンリクエストを開始して、エラーが続くかどうかを確認します。

      2. 管理するドメイン名をクリックし、[キャッシュ] > [POP HTTPレスポンスヘッダー] を選択します。

      3. ビジネス要件に基づいてカスタムHTTPレスポンスヘッダーを指定します。

  7. 前述のすべての操作を実行してもエラーが発生しない場合は、トラブルシューティングについて「OSS CORS」をご参照ください。