9

ajaxgetJSON、およびそのような関数を使用して、ローカル (非サーバー) 開発用コンピューターから外部 URL を取得しようとしています。サーバーにアップロードする代わりに、ローカルでテストできるように、同じオリジン ポリシーをバイパスする方法はありますか?

4

8 に答える 8

6

簡単な答えは次のとおりです: 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

于 2011-03-12T06:44:40.337 に答える
4

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 つの利点は、同じローカルホストからすべての異なるシステム (開発とテスト) を呼び出すことができることです。

于 2010-08-14T16:59:30.973 に答える
2

開発に使用しているブラウザーに応じて、これを回避するさまざまな方法があります。例えば:

  • Firefox (Gecko) では、次のように設定security.fileuri.strict_origin_policyします。false
  • Chrome で、オプションを指定してブラウザを起動します--allow-file-access-from-files

参考文献: Firefox , Chrome

于 2010-08-14T04:29:11.577 に答える
1

サーバーに触れることなく -

Firefox で同一オリジン セキュリティ ポリシーをバイパスする最も迅速かつ簡単な方法は、Force CORS アドオンをインストールすることです。これは、すべての応答に適切なヘッダーを挿入することで、どのサービスでも機能します。

https://addons.mozilla.org/en-US/firefox/addon/forcecors/

于 2012-02-09T21:33:59.613 に答える
0

私もその問題を抱えていましたが、Chromeを使用しても、この--allow-file-access-from-filesオプションはあまり役に立ちませんでした。サーバーが返す必要のあるスクリプトに戻ると、これらのヘッダーを応答に追加しましたが、正常に機能しました。

'Access-Control-Allow-Origin: http://localhost/'

もう1つは、一種の鍵交換を可能にするためのものです。

'Access-Control-Allow-Headers: X-KEY'
于 2012-02-04T17:34:14.920 に答える
0

CORS での localhost の使用は許可されていませんhttp://code.google.com/p/chromium/issues/detail?id=67743代わりに lvh.meを使用してください

于 2013-04-18T13:41:33.933 に答える
0

これは開発上の問題であり、エンドユーザー/機能の問題ではないため、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-Typeofで応答する場合、解析するtext/htmlものはありません。responseXML

于 2010-08-14T04:33:22.017 に答える