2

シンプルな Hello World NODEJS サーバーを作成しました。http://localhost:3000で NODEJS サーバーにアクセスしようとしているクロムで実行されている enyo Web サービスがあります。

onSuccess メソッドを呼び出すと、データが読み込まれず、consule に次のエラーが表示されます。

XMLHttpRequest cannot load http://localhost:3000/. Origin http://localhost:81 is not allowed by Access-Control-Allow-Origin.

ブラウザでnodejsサーバーをテストしましたが、うまくいきました。

フラグをクロムに設定しようとしましたが--disable-web-security、機能しませんでした。

この問題を解決する方法を知っている人はいますか? NOD.js が別のサーバーで実行されている場合、動作しますか? このセキュリティは非常に紛らわしいです。テッド

4

1 に答える 1

6

セキュリティ上の理由から、ブラウザは、スクリプトが XMLHttpRequest 経由で行うリクエストを制限しています。

リクエストは、次の 2 つのケースでのみ成功します。

  1. スクリプトがロードする URI のオリジンは、スクリプトが実行されているページのオリジンと同じです (localhost:81 と localhost:3000 は同じホストですが、オリジンは異なります)。
  2. または、ブラウザーがサポートしている場合、要求されているページのサーバーには、問題のオリジンから提供されるページ (またはすべてのオリジンから提供されるページ) を XMLHttpRequests にすることを明示的に承認する Access-Control-Allow-Origin ヘッダーが含まれています。

ノードコードで応答を生成しているものに Accesss-Control-Allow-Origin ヘッダーを追加してみてください。次のようなコードにヘッダーを追加してください。

response.writeHead(200, {
                         'Content-Type': 'text/plain',
                         'Access-Control-Allow-Origin' : 'http://localhost:81'

                         //allow anything by replacing the above with
                         //'Access-Control-Allow-Origin' : '*'

});
于 2012-01-14T15:52:12.850 に答える