オリジン間リソース共有(Cross-Origin-Resource-Sharing、CORS) とは
-
あるオリジンで動作するウェブアプリに、異なるオリジンに存在するリソースへのアクセス権を与えるようブラウザに指示する仕組み。
-
オリジン
* ウェブコンテンツにアクセスするために使われる URLのプロトコル、 ドメイン(ホスト)、 ポート によって定義される情報。
* スキーム、ドメイン(ホスト)、ポートがすべて一致した場合、二つのオブジェクトは同一オリジンであると言える。- 例
http://example.com/app1/index.html http://example.com/app2/index.html
-
-
オリジン間リクエスト例
-
https://domain-a.com
で提供されているウェブアプリのフロントエンド JavaScript がXMLHttpRequest
を使用してhttps://domain-b.com/image-b.png
へリクエストを行う場合- セキュリティ上の理由から、ブラウザは、スクリプトによって実行されるオリジン間 HTTP リクエストを制限する。
-
XMLHttpRequest
やFetch
は同一オリジンポリシー(あるオリジンのリソースは、そのリソースから他のオリジンのリソースにアクセスできないように制限する)に従う。 - 上述のAPI を使用するウェブアプリは、そのアプリと同一オリジンに対してのみリソースのリクエストを行うことができ、それ以外のオリジンの場合は正しい CORS ヘッダーを含んでいる必要がある。
-
アクセス制御方法
単純リクエスト
プリフライトリクエスト
-
OPTIONS
メソッドを指定した HTTP リクエストを他ドメインのリソースに向けて送信し、実際のリクエストを送信しても問題ないかを確認する。
資格情報付きリクエスト
-
クッキー付きでリクエストする。
-
サーバーはアクセスを許可する場合、
Access-Control-Allow-Credentials:true
を付与してレスポンスを返却する。