JavaScriptのHTTPアクセスのクロスドメイン問題 | 一歩一歩

一歩一歩

一日一日を新しく。昨日より成長していけたらいいな

いくつかの解決方法を覚書
サーバの権限にもよって選択肢も変わると思います。

※JavaScriptのHTTPアクセスのクロスドメイン問題
Ajaxでよく使われるXMLHttpRequestはSame-Origin Policyのため、ドメインを超えたリソースへのアクセスが出来ません。
例えば、http://sample.jp/js/ajax.jsから呼び出されたfunctionはhttp://sample.jp/配下のリソースにしかアクセスが出来ない。サブドメインであっても同様で、http://www.sample.jp/配下のリソースへはアクセスが出来ません。

よくある話として、jQuery(jFeed)などでRSSを取得したい時
http://sample.jp/js/ajax.js で http://www.sample.com/rss/ のRSSを取得したいとして、

解決策:
1ApacheなどWebサーバの設定変更が可能な場合
Proxyリクエストを利用してApacheに他サーバへのリクエストをProxyさせる。
自サーバ sample.jp 内のApacheの設定ファイルに

proxy /rss/ameblo/tinux http://feedblog.ameba.jp/rss/ameblo/tinux
proxyReverse /rss/ameblo/tinux http://feedblog.ameba.jp/rss/ameblo/tinux

などを追加することで sample.jp サーバ経由でのリソースにアクセスが可能になる

2Webサーバの設定変更は出来ないがプログラム設置が可能な場合
PHP・Servlet・CGIなどのプログラム経由でRSS情報を取得して sample.jp サーバで返却する
http://sample.jp/servlet/rss/ameblo/tinux などにサーブレットなどのプログラムを設置し
各プログラム内でアメブロのRSS情報を取得して返却する
(その際使いやすいように加工したり、キャッシュするなども可能)
JAVAならRSSやAtomなどの取得が容易なライブラリが豊富なのでキャッシュ機構も入れるといいでしょう。

3自分で管理してる別ドメインのリソースの場合
JSONPなどの利用が可能
JSONPとはJSONフォーマットの拡張?で、scriptタグを利用して外部JSを呼び出し、関数呼び出しの形でコールバック関数を実行する方法です。過去にJSONP配信を行った際は、別ドメインからも非常に便利に利用が出来たので重宝しました。
最近はJSONP形式でRSSなどを配信してくれるサービスも増えてきているようです。

上記の3つがクロスドメインのリソースにアクセスする際にはよく使われると思います。

最近ではFlashもセキュリティポリシーが徐々に厳しくなってきている上に、クロスドメイン間のやり取りが非常に増えてきているのでドメインを跨いだリソースのアクセスは色々と工夫が必要なようです。
自サーバの場合はFlashはcrossdomain.xmlなどを置けるので比較的楽に対応はできますが。