JSONPって?
オリジンサーバ*1ポリシー
JavaScriptは、ネットワーク経由で転送できる実行可能なデータであり、プレーンなテキストファイルなどと比べると潜在的な危険性がある。
その為、ブラウザのベンダは、JavaScriptをサンドボックス内で実行し、ローカルファイルへアクセスさせないなどの動作を制限している。
また、オリジンサーバポリシーの為、ネットワークを経由したデータのやりとりは自身のドメインのみと制限されている。
これは、当然XMLHttpRequestも当てはまることで、回避策としては次の2つの方法がある。
1.自ドメインのサーバを経由してデータを取得する。
この場合、クライアント(XMLHttpRequest)が直接対話するサーバは自ドメインのサーバとなる為、制限の対象とはならない。
しかし、自ドメインのサーバにトラフィックが集中するなどの問題もある。
2.JavaScriptソースとしてデータを受信する。
Scriptタグのsrc属性に記述するURLにはドメインの制約がない為、データをJSON(JavaScript Object Notation)形式に加工し、JavaScriptのコードとしてデータを受信する。
これは、データがJSON形式である必要がある点と悪意のあるコードを受け入れてしまう可能性があるところに注意が必要である。
JSONP(JSON with Padding)
JSONPは、JSON 形式のデータに手を加え、JavaScript の関数として呼び出せるようにしたもの。
具体的には、まずクライアント側でcallback関数を定義しておき、Javascriptのソースとして次のような形のデータを受信する。
callback([・・JSON形式のデータ・・]); ※.callback は、callback関数の名前
すると、データの受信後にcallback関数が呼び出される。
但し、これはデータの送信側で JSONP形式 にデータを加工する必要がある。
ソーシャル・ブックマーク・サービスの del.icio.us では JSONP 形式のフィードも提供しているらしい。
*1:・コンテンツ配信の基点となるサーバーを意味する。