Access-Control-Allow-Origin 【ACAO】
概要
Access-Control-Allow-Origin(ACAO)とは、HTTPヘッダのフィールド(項目)の一つで、送信するコンテンツが他のサーバとのリソース共有(CORS)を許可されているかを示すもの。HTTPはWebサーバとWebクライアント(Webブラウザなど)の間でデータの伝送を行なう通信規約(プロトコル)の一つで、通信の制御情報を前半部のHTTPヘッダに記述し、後半のHTTPボディが伝送内容の本体を表す。ヘッダは改行区切りのテキスト(文字)形式で「項目名: 値(改行)」という記法で設定を列挙する。
Access-Control-Allow-Originはサーバからクライアントへの応答であるHTTPレスポンスで用いられるヘッダ項目の一つで、複数のサーバにまたがってコンテンツを組み合わせる「CORS」(Cross-Origin Resource Sharing:クロスオリジンリソース共有)を許可するかどうかを通知するのに用いられる。
設定値として「*」を記載すると、あらゆるオリジンから当該コンテンツへのアクセスを許可する。特定のオリジンに対してのみ共有を許可したい場合は設定値に許可したいオリジンを記載する。「オリジン」はWebサーバを識別するための値のセットで、「http://example.jp:8080/」のようにURIスキーム、ホスト名(FQDN)、ポート番号(標準の場合は省略可)の組である。
例えば、「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」というヘッダを追加してデータを送信する。a.example.jpに限らずネット上のあらゆるホストからアクセスを許可したければ「*」を指定する。共有を拒否する場合はAccess-Control-Allow-Originヘッダを送信しないようにする(「null」という値を送る手法もあったが現在は非推奨)。