2016-04-17 16 views
1

私はEmber Dataを使い始めようとしていて、実際のリクエストの前にブラウザがOPTIONSリクエストを送信したので、すぐにこの問題が発生しました。「プリフライトリクエスト」を避けるにはどうすればよいですか?

開発中のバックエンドと通信しようとしているのは、ローカルマシンで動作するレール4.2サーバーです(rails s -b 0.0.0.0で始まります) 私は現在、このapiを使ってAndroidとiosの両方から通信しています。私の最終目標は、既存のレールUIに加えてEmberアプリを提供することですが、それを置き換えてEmber UIしか持たない場合、それは問題ありません。

私はCORSに関する読書をしましたが、私はそれが何をしようとしているのかを少なくとも理解しています。私が正しく理解していれば、ブラウザは、Emberアプリケーションが、要求が行われているサーバー以外のサーバーによって提供されていると判断します。

だから私の質問は以下のとおりです。

  1. 私はこれらのCORS OPTIONS要求が必要とされていないような実サーバに私の燃えさしアプリを展開することができるだろうか? (つまり、私はレールアプリがブラウザにEmberアプリを渡すことができ、ブラウザはスクリプトのソースをリクエストのターゲットと同じで、プレファイトリクエストを必要としないと見なします)
  2. どうすれば入手できますかこれは開発の仕組みですか?私はember s --proxyに--proxyオプションがあることを知っています。これはこれのための解決策であるように思えましたが、動作させることができませんでした。

私がナビゲートすると私はhttp://localhost:3000/api/v1/usersレールにアクセスしようとしているサーバーのURLは次の応答ログに:これに基づき

Started GET "/api/v1/users" for 127.0.0.1 at 2016-04-17 10:02:01 -0400 

を、私は私のエンバーアダプタが正しくセットアップされていると思う:

import JSONAdapter from 'ember-data/adapters/json-api'; 

export default JSONAdapter.extend({ 
    host: 'http://127.0.0.1:3000', 
    namespace: 'api/v1' 
}); 

その後、私はエンバーを開始しますこのコマンドのサーバ:

ember s --proxy http://127.0.0.1:3000 

レールサーバは、次のリクエストを受信して​​いる:私はそのためのルートを持っていない(と私はどちらかしたくないと思う)ので、失敗し

Started OPTIONS "/api/v1/users" for 127.0.0.1 at 2016-04-17 09:36:51 -0400 

答えて

2

--proxyを使用する場合は、hostを上書きしないでください。

emberアプリは現在のエンドポイント(おそらくlocalhost:4200)にすべてのリクエストを行い、開発サーバーはリクエストをバックエンドにリダイレクトします。

あなたの場合:

  1. hostを設定しない、開発的環境

--proxyを使用したい生産のバックエンドサーバーから燃えさしのアプリを提供し、そして

  • たいあなたのアダプターはちょうど楽しいです。hostを設定すると、emberはこのデータをhostに直接送信し、開発サーバーではなくCORSというリクエストを送信します。

  • 関連する問題