6

バックエンドAPIは、それを使用するフロントエンドHTML5アプリとは別のプロジェクトとして保持しています。フロントエンドの開発にはヨーマンを使用しています。Yeomanはlocalhost:3501で実行され、バックエンドはlocalhost:3000で実行されます。ブラウザから(AngularJSの$ httpを使用して)APIリクエストを行うと、同じオリジンポリシーが適用されます。

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

AFAIK、同一生成元ポリシーは、異なるドメイン間でリクエストを行う場合にのみ開始する必要があります。localhostからlocalhostに(異なるポートではありますが)リクエストを実行すると、なぜ泣き言を言うのですか?

どうすればこれを機能させることができますか?これは本番環境で問題を引き起こしますか?

4

2 に答える 2

14

ポートはクロスドメインリクエストにもカウントされるためhttp://localhost:30002つの異なるドメインです(ブラウザーの観点から)。http://localhost:3501

両方のアプリケーション(クライアントとバックエンド)を異なるポートで実行する必要がある場合は、http://enable-cors.org/の使用を検討してください。

于 2013-01-10T16:52:23.497 に答える
3

W3Cによると、「オリジンはURLのスキーム、ホスト、ポートによって定義される」ため、ポートが異なると問題が発生します。

2つの可能な解決策:

  • CORS(クロスオリジンリソースシェアリング)
  • JSONPリクエストの使用

どちらもバックエンドへの変更が必要になります(私は十分な知識がありません。CORSはおそらくフロントエンドへの変更が最も少ないことを意味します(AngularJSはそのままサポートしていると思います)。

于 2013-01-10T16:56:45.797 に答える