ajax
、getJSON
、およびそのような関数を使用して、ローカル (非サーバー) 開発用コンピューターから外部 URL を取得しようとしています。サーバーにアップロードする代わりに、ローカルでテストできるように、同じオリジン ポリシーをバイパスする方法はありますか?
8 に答える
簡単な答えは次のとおりです: chrome --disable-web-security
ソース コード (chrome_switches.h) から:
// Don't enforce the same-origin policy. (Used by people testing their sites.)
const char kDisableWebSecurity[] = "disable-web-security";
jquery.js を使用して、ポート 8080 で実行されている Google Apps python サーバーに AJAX 呼び出しを送信したいと考えていました。テストのためだけに、ブラウザとサーバーを同じマシンで実行したかったのです。
セキュリティのニュアンスをすべて理解しているわけではありませんが、一時的な開発では合理的な回避策のようです。このフラグを使用してテストするためにクロムのみを使用する限り、問題にはなりません。
Mac OS X のコマンド全体は次のとおりです。
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --disable-web-security
Web アプリを開発するときも、同じニーズがありました。方法は次のとおりです。
ブラウザーとサーバーは、JSON を介してのみ通信します。すべての HTML は、 PURE (当社の JS テンプレート エンジン)
を使用してブラウザーでレンダリングされます。
ブラウザー コードは、次のようにローカルで開発されます。
host
アプリの URL にパラメーターを追加します。
http://localhost/app.html?host=test.beebole-apps.com
本番環境では、JSON は POST でサーバーに送信されます。
しかし、ここでは ajax 呼び出しを担当する関数がhost
パラメーターに反応し、代わりにJSONPインジェクション (GET) を行います。
<script src="http://test.beebole-apps.com/?callback=f2309892&json={...}" />
f2309892
応答を処理するメソッドを指す、ランダムな名前を持つ一時的な関数です。json
サーバーに送信するJSONです
これは、次のようなコールバック関数でラップされた json を提供するために、バックエンドからの協力が必要になることを意味します。
f2309892( /*the json here*/ );
サイズの制限 (GET で大きな JSON をサーバーに送信することはできません) を除けば、簡単に動作します。
もう 1 つの利点は、同じローカルホストからすべての異なるシステム (開発とテスト) を呼び出すことができることです。
サーバーに触れることなく -
Firefox で同一オリジン セキュリティ ポリシーをバイパスする最も迅速かつ簡単な方法は、Force CORS アドオンをインストールすることです。これは、すべての応答に適切なヘッダーを挿入することで、どのサービスでも機能します。
私もその問題を抱えていましたが、Chromeを使用しても、この--allow-file-access-from-files
オプションはあまり役に立ちませんでした。サーバーが返す必要のあるスクリプトに戻ると、これらのヘッダーを応答に追加しましたが、正常に機能しました。
'Access-Control-Allow-Origin: http://localhost/'
もう1つは、一種の鍵交換を可能にするためのものです。
'Access-Control-Allow-Headers: X-KEY'
CORS での localhost の使用は許可されていませんhttp://code.google.com/p/chromium/issues/detail?id=67743代わりに lvh.meを使用してください
これを試してください(php curl ayax cross domain - by google):
http://www.iacons.net/writing/2007/08/02/ajax-cross-domain-proxy/
http://www.phpfour.com/blog/2008/03/cross-domain-ajax-using-php/
http://jquery-howto.blogspot.com/2009/04/cross-domain-ajax-querying-with-jquery.html
これは開発上の問題であり、エンドユーザー/機能の問題ではないため、AJAX をドメイン間で使用することに集中するのではなく、開発環境をプロキシとして設定して、運用サーバーから最新のデータを取得します。これは実際には非常に簡単に行うことができます。
開発環境に Web サーバーをセットアップし (まだ持っていない場合)、運用データを取得してからエコーすることで 404 要求に応答するようにサーバーを構成する必要があります。AJAX データ ファイルのみが取得されるようにサーバーを設定できます (そうしないと、開発ページに実稼働資産が表示され始めた場合に、他のファイルのデバッグが混乱する可能性があります)。したがって、http://dev.myserver.com/data/json/mydata.json
が欠落している場合、404 スクリプトはそれを取得http://prod.myserver.com/data/json/mydata.json
してクライアントにエコーします。このセットアップの良い点は、モック データを非常に簡単に使用できることです。ファイルが開発環境にある場合、AJAX スクリプトはそれを取得します。ただし、そのファイルを消去または名前変更すると、代わりに本番データが取得されます。この機能はとても便利なので、あまりお勧めできません。
XML を使用している場合は、404 で HTTP ヘッダーを複製することをお勧めします。404 プロセスがContent-Type
ofで応答する場合、解析するtext/html
ものはありません。responseXML