CORS 【Cross-Origin Resource Sharing】 オリジン間リソース共有 / クロスオリジンリソース共有
概要
CORS(Cross-Origin Resource Sharing)とは、Webサーバに特殊なHTTPヘッダ項目を追加することで、送り出したWebページ上のスクリプトがWebブラウザから別のサーバへアクセスできるようにすること。HTTP通信における「オリジン」(origin:データの送信元)とは、Webページや画像ファイルなどの所在を表すURLのうち、URIスキーム(http://かhttps://かの違い)、ホスト名(Webサーバのドメイン名)、ポート番号(デフォルトではhttpがTCP80番、httpsがTCP443番)の組み合わせのこと。
通常はWebページ上のスクリプトなどからは同一オリジンのリソースのみアクセスできるという制限(SOP:Same-Origin Policy/同一生成元ポリシー)が課されるが、Webサーバ側でCORSの指定を行うと、この原則を緩和して指定されたオリジンへのアクセスが許可される。複数のドメインにまたがって情報や機能を組み合わせたい場合に用いられる。
具体的には、WebサーバとWebブラウザのHTTP通信において、ヘッダに特殊な項目を付け加えることでアクセス許可の制御を行う。今、「https://a.example.jp/」上のスクリプトがXMLHttpRequest等で「https://b.example.jp/」にアクセスしたい場合、Webブラウザから b.example.jp へのHTTPリクエストに「Origin: https://a.example.jp」(私はa.example.jpのスクリプトです)というヘッダを追加する。
b.example.jp がアクセスを許可する場合は、対応するHTTPレスポンスで「Access-Control-Allow-Origin: https://a.example.jp」というヘッダを追加してデータを送信する。項目の値を「*」とすればすべてのオリジンからのアクセスを許可する。
実際には、このやり取りはいくつかの条件(メソッドがGET/HEAD/POSTのみ、いくつかの特定のヘッダ項目やContent-Typeのみ使用可能等)を満たした場合に利用できる「単純リクエスト」と呼ばれる手順である。条件を満たさない場合には、実際のデータ送受信開始前にアクセス許諾の手続きを済ませる「プリフライトリクエスト」という手順を使用する。また、HTTP認証の資格情報を含むリクエストを処理する仕様も別に定められている。