ワイルドカード(*)で全オリジンを許可する
ワイルドカード(*) Access-Control-Allow-Originヘッダーを使用して、任意のオリジンからのリクエストを許可するCORS設定方法を学びます。適切な使用場面と制限事項を解説します。
Basic CORS
詳細な説明
ワイルドカードオリジン — 最もシンプルなCORSポリシー
最も寛容なCORS設定はAccess-Control-Allow-Origin: *を設定することで、ブラウザに任意のオリジンがレスポンスを読み取れることを伝えます。
生成されるヘッダー
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, HEAD, OPTIONS
Access-Control-Max-Age: 86400
ワイルドカードが安全な場面
ワイルドカードオリジンが適切なのは以下の場合です:
- APIがパブリックで読み取り専用のデータを提供する(例:パブリックREST API、CDNアセット、オープンデータセット)。
- CookieやAuthorization ヘッダーが不要 —
credentialsフラグはfalseのままにする必要がある。 - データがユーザー固有ではなく、任意のウェブサイトが読み取っても悪用されない。
重要な制限 — 認証情報不可
CORS仕様では、Access-Control-Allow-Credentialsがtrueの場合、Allow-Originヘッダーは*にできないと明示されています。ブラウザはレスポンスを暗黙的に破棄します。APIがCookie、Authorizationヘッダーのベアラートークン、TLSクライアント証明書を使用する場合は、特定のオリジンまたはサーバーサイドの動的チェックに切り替える必要があります。
Nginxの例
add_header Access-Control-Allow-Origin "*" always;
add_header Access-Control-Allow-Methods "GET, HEAD, OPTIONS" always;
add_header Access-Control-Max-Age 86400 always;
セキュリティ上の考慮事項
便利ではありますが、*は世界中のどのウェブサイトでもJavaScriptリクエストを送信してレスポンスを読み取れることを意味します。書き込み操作(POST、PUT、DELETE)を行うエンドポイントやユーザー固有のデータを返すエンドポイントでは、必ず信頼できるドメインにオリジンを制限してください。
ユースケース
認証なしで予報データを返す公開天気APIです。あらゆるフロントエンド、モバイルアプリ、サードパーティ連携がデータを取得する必要があるため、オリジンを制限するとインテグレーションが壊れます。