JSONPって?

オリジンサーバ*1ポリシー

JavaScriptは、ネットワーク経由で転送できる実行可能なデータであり、プレーンなテキストファイルなどと比べると潜在的な危険性がある。
その為、ブラウザのベンダは、JavaScriptサンドボックス内で実行し、ローカルファイルへアクセスさせないなどの動作を制限している。
また、オリジンサーバポリシーの為、ネットワークを経由したデータのやりとりは自身のドメインのみと制限されている。

これは、当然XMLHttpRequestも当てはまることで、回避策としては次の2つの方法がある。

1.自ドメインのサーバを経由してデータを取得する。
  この場合、クライアント(XMLHttpRequest)が直接対話するサーバは自ドメインのサーバとなる為、制限の対象とはならない。
  しかし、自ドメインのサーバにトラフィックが集中するなどの問題もある。
2.JavaScriptソースとしてデータを受信する。
  Scriptタグのsrc属性に記述するURLにはドメインの制約がない為、データをJSONJavaScript Object Notation)形式に加工し、JavaScriptのコードとしてデータを受信する。
  これは、データがJSON形式である必要がある点と悪意のあるコードを受け入れてしまう可能性があるところに注意が必要である。

JSONPJSON with Padding)

JSONPは、JSON 形式のデータに手を加え、JavaScript の関数として呼び出せるようにしたもの。

具体的には、まずクライアント側でcallback関数を定義しておき、Javascriptのソースとして次のような形のデータを受信する。

callback([・・JSON形式のデータ・・]);			※.callback は、callback関数の名前

すると、データの受信後にcallback関数が呼び出される。

但し、これはデータの送信側で JSONP形式 にデータを加工する必要がある。

ソーシャル・ブックマーク・サービスの del.icio.us では JSONP 形式のフィードも提供しているらしい。

*1:・コンテンツ配信の基点となるサーバーを意味する。