同一オリジンポリシーを回避する方法

同じ起源のポリシー

HTML/JSのsame-origin policyに関するコミュニティWikiを作って、このトピックを探している人の助けになればと思っています。これはSOで最も検索されるトピックの1つであり、そのための統合されたwikiはありませんので、ここで紹介します。)

同一オリジンポリシーとは 同一オリジンポリシーは、あるオリジンから読み込まれたドキュメントやスクリプトが オリジンから読み込まれたドキュメントやスクリプトが 同一オリジンポリシーは、あるオリジンから読み込まれた ドキュメントやスクリプトが、別のオリジンのドキュメントのプロパティを オリジンこのポリシーは、Netscape Navigator 2.0までさかのぼります。 Netscape Navigator 2.0までさかのぼります。

同一オリジンポリシーを回避するためのお気に入りの方法はありますか?

例は冗長にして、できればソースもリンクしてください。

リバースプロキシ方式を採用しています。

  • メソッドの種類。Ajaxの場合

サーバに単純なリバースプロキシを設定することで、ブラウザはAjaxリクエストに相対パスを使用し、サーバはリモートロケーションへのプロキシとして機能します。

Apacheでmod_proxyを使用している場合、リバースプロキシを設定するための基本的な設定ディレクティブは、ProxyPassです。通常は以下のように使用します。

ProxyPass     /ajax/     http://other-domain.com/ajax/

この場合、ブラウザは相対URLとして /ajax/web_service.xml をリクエストすることができますが、サーバは http://other-domain.com/ajax/web_service.xml へのプロキシとして動作することでこれを提供します。

この方法の興味深い特徴のひとつは、リバースプロキシが複数のバックエンドに向けてリクエストを容易に分散させることができ、ロードバランサーとして機能することです。

解説 (0)

私はJSONPを使っています。

基本的には以下のように追加します。

<script src="http://..../someData.js?callback=some_func"/>

を追加します。

some_func()が呼ばれて、データが入ったことが通知されるようにします。

解説 (5)

個人的には、window.postMessageが、モダンブラウザで見つけた最も信頼できる方法です。XSS攻撃を受けないようにするための作業が少し増えますが、それは妥当なトレードオフと言えるでしょう。

また、window.postMessageをラップして、上述の他の方法で古いブラウザに同様の機能を提供する、一般的なJavascriptツールキット用のプラグインもいくつかあります。

解説 (0)