CORS(Cross-Origin Resource Sharing)
概要
オリジン間リソース共有 (CORS) - HTTP | MDN
CORS(Cross-Origin Resource Sharing)は、Webブラウザ上で動作するWebアプリケーションが、異なるオリジン(ドメイン、プロトコル、ポート)のリソースにアクセスする際に、セキュリティ上の制限を緩和するための仕組みです。
特徴
- ブラウザによるセキュリティ機構: CORSは、Webブラウザに組み込まれたセキュリティ機構であり、JavaScriptなどのスクリプトからのクロスオリジンリクエストを制御します。
- HTTPヘッダーによる制御: サーバーは、HTTPレスポンスヘッダーを通じて、どのオリジンからのアクセスを許可するかを指定します。
- プリフライトリクエスト: 特定の条件を満たすリクエスト(プリフライトリクエスト)では、実際のデータ送信前にサーバーに問い合わせを行い、安全性を確認します。
分類
- 単純リクエスト: GET、HEAD、POSTメソッドのうち、特定の条件を満たすリクエスト。
- プリフライトリクエスト: PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCHメソッドや、単純リクエストの条件を満たさないリクエスト。
上位概念・下位概念
- 上位概念:
- 同一オリジンポリシー (Same-Origin Policy)
- Webセキュリティ
- 下位概念:
- プリフライトリクエスト
- HTTPヘッダー (Access-Control-Allow-Origin など)
メリット
- 異なるオリジン間でのリソース共有: 異なるドメイン間で安全にリソースを共有し、Webアプリケーションの機能を拡張できます。
- API連携の促進: 異なるWebサービス間でのAPI連携を容易にし、マッシュアップなどの高度なWebアプリケーションを実現します。
デメリット
- 設定の複雑さ: サーバー側でのHTTPヘッダーの設定が複雑になる場合があります。
- セキュリティリスク: 設定ミスがあると、悪意のあるサイトからのアクセスを許してしまう可能性があります。
既存技術との比較
- JSONP (JSON with Padding): CORSが登場する以前にクロスオリジンリクエストを実現する技術として利用されていましたが、CORSに比べてセキュリティ上のリスクが高いです。CORSはJSONPに比べよりセキュアなクロスオリジンリクエストを提供します。
競合
- CORSは、クロスオリジンリソース共有のための標準的な技術であり、競合となる技術はほとんどありません。
導入ポイント
- 必要なオリジンのみ許可:
Access-Control-Allow-Origin
ヘッダーで、アクセスを許可するオリジンを明確に指定します。 - プリフライトリクエストへの対応: 必要に応じて、プリフライトリクエストに対応するサーバー側の設定を行います。
- セキュリティの考慮: 信頼できないオリジンからのアクセスは許可しないなど、セキュリティを十分に考慮した設定を行います。
注意点
- ブラウザの対応状況: 古いブラウザではCORSに対応していない場合があります。
- サーバー側の設定: サーバー側の設定が正しくないと、CORSが正常に機能しません。
- セキュリティ: CORSの設定はセキュリティに影響を与えるため、慎重に行う必要があります。
今後
- Webアプリケーションの高度化に伴い、CORSの重要性はさらに高まると考えられます。
- セキュリティ上の課題に対応するため、CORSに関する仕様の改善や新たなセキュリティ機構の導入が進む可能性があります。
関連キーワード
- 同一オリジンポリシー (Same-Origin Policy)
- HTTP
- JavaScript
- API
- Webセキュリティ
- プリフライトリクエスト
- Access-Control-Allow-Origin