0

ブラウザーでホストされている JS アプリが、最初に JS アプリを提供しているマシンとは異なるポート、場合によっては別のマシンで実行されているサーバーにリクエストを送信できるようにする方法を探しています。

Mac OS X Apache Web サーバーから単純な JavaScript (HTML5) アプリを提供しています。Windows、Android、OS X のできるだけ多くのブラウザーでこのアプリを実行できるようにしたいと考えています。

私の JavaScript アプリは、XMLHttpRequest を使用して、JSON を返す最小限のカスタム サーバーの要求を作成します。

たとえば、私の JS アプリは次の場所でアクセスできます。http://10.0.1.3/poc/dashboard.html

私のカスタム サーバーは同じマシンで実行され、ポート 49379 でリッスンしています ... このようなリクエストはhttp://10.0.1.3:49379/find?name=Fred、'name' が 'Fred' に等しい一連のタプルを返します。

このリクエストをナビゲーション ツールバーに直接入力すると、目的の結果が得られます。

JS 内で同じリクエストを行うと、いくつかのエラーが発生します。

var theXHR = new XMLHttpRequest();
theXHR.onreadystatechange = onReadyStateHandler;
theXHR.open("GET", "http://" + ipAddress + ":49379/find?name=Fred", true);
theXHR.setRequestHeader("User-Agent", "XMLHTTP/1.0");
theXHR.send(null);

次の 2 つのエラーが表示されます。

  1. 安全でないヘッダー「User-Agent」の設定を拒否しました

  2. XMLHttpRequest を読み込めませんhttp://10.0.1.3:49379/find?name=Fredhttp://10.0.1.3Access-Control-Allow-Origin でオリジンが許可されていません。

Apache サーバー、JavaScript、およびカスタム サーバーを制御できます。これは、分離されたネットワークでデモを行う概念実証にすぎません。したがって、セキュリティの問題については心配していません。

また、Chrome、Firefox、Safari で実行しています。これらはすべて XMLHttpRequest2 オブジェクトを使用しているようです。

4

1 に答える 1

1

CORS を回避する方法は、jsonp を使用することであることがわかりました。これは、コールバック関数を備えた json です。XMLHttpRequest で使用したことはありませんが、$.getJSON. URL クエリ文字列にパラメーターjsoncallback=?を追加するだけで、CORS の問題はなくなります。パラメータをコールバック関数に$.getJSON動的に割り当てます。success

于 2013-03-07T18:15:11.977 に答える