Cross Origin Resource Sharing (CORS)
クロスオリジン・リソース・シェアリング(CORS)は、ウェブページを提供したドメインのサーバーとは異なるドメインのサーバー上のリソースに安全にアクセスできるようにする仕組みです。
ウェブページは、クロスオリジンの画像、スタイルシート、スクリプト、iframe、動画を自由に埋め込むことができます。特定の「クロスドメイン」リクエスト、特にAjaxリクエストは、同一オリジンセキュリティポリシーによってデフォルトで禁止されています。
CORSは、ブラウザとサーバーが相互作用して、クロスオリジン・リクエストを許可しても安全かどうかを判断する方法を定義しています。これは、純粋に同一オリジンのリクエストよりも自由度と機能性を高めますが、単純にすべてのクロスオリジンリクエストを許可するよりも安全です。
CORSの仕様はWHATWGの「Fetch Living Standard」の一部として含まれている。この仕様は、CORSが現在どのようにブラウザに実装されているかを説明しています。以前の仕様はW3C勧告として発表された。
概要
別のドメインを指す <form> タグを使ったり、セーフリストに載っていないヘッダを含んだりすることができない JavaScript からの HTTP リクエストに対して、この仕様ではブラウザがリクエストを「プリフライト」し、HTTP OPTIONS リクエストメソッドでサーバーからサポートされているメソッドを要求し、サーバーからの「承認」があれば実際の HTTP リクエストメソッドで実際のリクエストを送信することを義務付けています。サーバーはまた、"クレデンシャル"(クッキーや HTTP 認証データを含む)をリクエストと一緒に送るべきかどうかをクライアントに通知することができます。
簡単な例
ユーザーがhttp://www.example.com、ページがhttp://service.example.com からデータをフェッチするためにクロスオリジン・リクエストを試みたとする。CORS対応ブラウザは、以下のようにservice.example.comへのクロスオリジン・リクエストを試みる。
- ブラウザは、親ページを提供したドメインを含むservice.example.comへの余分なOrigin HTTPヘッダーを持つGETリクエストを送信します:
Origin: http://www.example.com