CORS(Cross-Origin Resource Sharing)は、異なるオリジン間でリソースを共有するための仕組みです。これにより、あるオリジン(例:https://example.com)で動作しているウェブアプリケーションが、異なるオリジン(例:https://api.example.com)にあるリソースにアクセスできるようになります。
基本概念
オリジンとは
オリジンは、URLのスキーム(プロトコル)、ホスト(ドメイン)、ポートによって定義されます。例えば、https://example.com:443は一つのオリジンです。オリジンが異なる場合、スキーム、ホスト、またはポートのいずれかが異なります。
同一生成元ポリシー
ブラウザはセキュリティのために「同一生成元ポリシー」を実装しています。これにより、異なるオリジン間でのリソースアクセスが制限されます2。例えば、https://example.comからhttps://api.example.comへのリクエストは、同一生成元ポリシーによりブロックされます。
CORSの仕組み
CORSは、追加のHTTPヘッダーを使用して、異なるオリジン間でのリソース共有を可能にします。以下は、CORSの基本的な流れです:
- プリフライトリクエスト:特定の条件下で、ブラウザは実際のリクエストを送信する前に、OPTIONSメソッドを使用してプリフライトリクエストを送信します。これにより、サーバーがCORSリクエストを許可するかどうかを確認します。
- サーバーの応答:サーバーは、Access-Control-Allow-Originヘッダーを含む応答を返します。このヘッダーには、許可されたオリジンが指定されます。
- 実際のリクエスト:プリフライトリクエストが成功すると、ブラウザは実際のリクエストを送信し、サーバーからのリソースを取得します。
CORSヘッダーの例
- Access-Control-Allow-Origin:許可されたオリジンを指定します(例:https://example.com)。
- Access-Control-Allow-Methods:許可されたHTTPメソッドを指定します(例:GET, POST)。
- Access-Control-Allow-Headers:許可されたHTTPヘッダーを指定します(例:Content-Type)。
- Access-Control-Max-Age:プリフライトリクエストの結果をキャッシュする期間を秒単位で指定します。
CORSの利点と注意点
利点:
異なるオリジン間でのリソース共有が可能になり、ウェブアプリケーションの柔軟性が向上します。
注意点:
セキュリティリスクが増加する可能性があるため、適切な設定が必要です。例えば、Access-Control-Allow-Originをワイルドカード(*)に設定すると、全てのオリジンからのアクセスが許可され、セキュリティリスクが高まります。
CORSの設定や実装についてさらに詳しく知りたい場合は、具体的な例やドキュメントを参照することをお勧めします。