2016-09-04 73 views
1

我在角發送POST請求到不同的域,像這樣:Angularjs獲得期權和POST請求

$http.post('http://domain.com/auth', { email: $scope.email, password: $scope.password }) 

而在我的請求日誌,它只是發送OPTION請求。

所以我將此添加到我的domain.com/auth

header('Access-Control-Allow-Origin: *'); 
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept"); 
header('Access-Control-Allow-Methods: GET, POST, PUT'); 

但現在,我得到一個OPTION請求,然後再一個POST請求。所以,因爲我的OPTION請求是第一個,我認爲它仍然與我的結果混淆。

有誰知道如何獲得POST請求而不是OPTIONS請求?

+0

根據[MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS):「瀏覽器」預檢「請求,通過HTTP OPTIONS請求從服務器請求支持的方法方法,然後,在從服務器獲得「批准」後,用實際的HTTP請求方法發送實際的請求並通知客戶是否應該發送「憑證」(包括Cookies和HTTP認證數據)與請求。「 [見此](http://stackoverflow.com/a/13030629/2852427)和下面的答案。 – Ekin

回答

2

可以防止在POST預檢通過觸發simple request

要做到這一點,使用$httpParamSerializerJQLike編碼數據(確保注入串行),並設置內容類型application/x-www-form-urlencoded

$http({ 
    url: 'YOUR_ENDPOINT', 
    method: 'POST', 
    data: $httpParamSerializerJQLike(YOUR_DATA), 
    headers: { 
    'Content-Type': 'application/x-www-form-urlencoded' 
    } 
}) 
+0

你搖滾的人,謝謝你。 – bryan