クロスドメインで調べた事メモ
ajaxでクロスドメインだと動かない件で、ググったことが多かったのでメモ。
じゃあどうすれば?
JSONP
JSONPの仕組み
- javasciprtの読み込みは別ドメインからできる。
- なのでjavascriptを読み込む体で、HTTPリクエストする。リクエストにはcallbackってパラメータいる
- そしたらjavascriptのコードが返ってくる(おや?偶然だけど中身はJSON!)
request例
/api/item/detail?callback=jsonp&id=100
response例
content-Type: text/javascript
content: jsonp({"result":{"item_id":100, "item_name":'アイテム'}})
plackアプリで実装するとき
PLACK::Middleware::JSONPを使う
パラメータに'callback'があれば、自動的にjsonを上記の形にして
sizeとかcontent-Typeを修正してくれる。
JSONとJSONPの対応を、モジュールに手を入れずにできる。
JSONPの課題
- ブラウザ依存ある
XMLHttpRequest Level2に対応したブラウザじゃないとダメ。
IE7とかはさようなら。。
- コードの精査はできない。
危険なコードも制御できずに実行される。
- GETはできるけどPOSTできない。
ajaxで商品の参照はできるけど、購入は無理。