3.2 JSONP の取り扱い
3.2 JSONP の取り扱い
JSONP (JSON with padding)
クロスサイト環境でほかのオリジンから JSON データを取得するために考案された仕組み。XHTTPRequest は同一生成元ポリシーの制限によって、同じドメインへのアクセスしか行うことができない。
script タグでは src 属性に他ドメインを指定できることを利用する。
- ドメイン A でコールバック関数を用意
- script タグを生成しドメイン B にアクセス。この時 url パラメータでコールバック関数の名称を伝える。(
<script src="http://domain_b/?callback=callback"></script>
) - ドメイン B ではデータ取得等を行い、データを引数としたコールバック関数を返却する。(
callback({"id": 123, "name": "saeed"})
) - ドメイン A は B から返却されたコールバック関数を実行する
コールバック関数の名前はクエリパラメータ (callback) で指定できるようにするのが一般的。
コールバック関数を動的に生成する場合等に、別々のコールバック関数を用意することができるようになるため。
callback パラメータが指定されている場合に JSONP を要求していると判断する。
script 要素はエラーステータスコード (400 等) が返るとスクリプトの読み込みを停止するため、JSONP に対応した場合にエラーコードを返すようにするとクライアント側ではそのエラーを検知できない。
=> エラーが発生しても 200 を返す。レスポンスボディ内にエラー情報を入れ込む。