Skip to content

3.2 JSONP の取り扱い

3.2 JSONP の取り扱い

JSONP (JSON with padding)

クロスサイト環境でほかのオリジンから JSON データを取得するために考案された仕組み。XHTTPRequest は同一生成元ポリシーの制限によって、同じドメインへのアクセスしか行うことができない。
script タグでは src 属性に他ドメインを指定できることを利用する。

  1. ドメイン A でコールバック関数を用意
  2. script タグを生成しドメイン B にアクセス。この時 url パラメータでコールバック関数の名称を伝える。(<script src="http://domain_b/?callback=callback"></script>)
  3. ドメイン B ではデータ取得等を行い、データを引数としたコールバック関数を返却する。(callback({"id": 123, "name": "saeed"}))
  4. ドメイン A は B から返却されたコールバック関数を実行する

コールバック関数の名前はクエリパラメータ (callback) で指定できるようにするのが一般的。
コールバック関数を動的に生成する場合等に、別々のコールバック関数を用意することができるようになるため。

callback パラメータが指定されている場合に JSONP を要求していると判断する。

script 要素はエラーステータスコード (400 等) が返るとスクリプトの読み込みを停止するため、JSONP に対応した場合にエラーコードを返すようにするとクライアント側ではそのエラーを検知できない。
=> エラーが発生しても 200 を返す。レスポンスボディ内にエラー情報を入れ込む。