2016-04-17 75 views
1

我試圖開始使用Ember Data,並立即遇到了這個問題,瀏覽器在實際請求之前發送了OPTIONS請求。如何避免「預檢請求」?

我試圖與之交流的開發後端是在本地機器上運行的rails 4.2服務器(從rails s -b 0.0.0.0開始) 我目前使用此api從android和ios應用程序進行通信。我的最終目標是除了現有的導軌UI之外還提供一個Ember應用程序,但是如果我必須替換它並且只有Ember UI,那就沒問題了。

我在CORS上做了一些閱讀,我想至少明白它想做什麼。如果我理解正確,那麼瀏覽器會將Ember應用程序看作是由服務器以外的服務器提供服務的服務器,並且因爲這會詢問服務器是否正常。

所以我的問題是:

  1. 請問我能不能到我的灰燼應用程序部署到真實服務器,從而不需要這些CORS OPTIONS請求? (即,我假設一個Rails應用程序可以向瀏覽器提供一個Ember應用程序,並且瀏覽器將看到該腳本的來源與請求的目標相同,並且不需要預演請求)
  2. 我該如何獲得這在發展中工作?我發現在ember s --proxy上有一個--proxy選項,它看起來應該是這個解決方案,但我一直無法使它工作

當我導航服務器URL我試圖訪問http://localhost:3000/api/v1/users軌道記錄了以下回應:

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. 想從生產後端服務器爲你的餘燼應用程序,並
  2. 想在你的開發環境使用--proxy

不設置host上你的適配器,只是有樂趣。如果您設置了host,則ember將直接將數據發送到此host,而不是您的開發服務器,從而產生CORS請求。