2016-10-03 51 views
0

我知道瀏覽器首先發送一個OPTIONS給服務器。但是我在Angularjs 1.5中面對這件事。我試圖發送一個PUT請求,它正在發送一個OPTIONS。爲什麼這很奇怪?,因爲我正在使用應用程序來測試我所有的url,並且使用PUT對url進行罰款。

let fd = new FormData() 
let d 
for (d in $scope.uploadAutos) { 
    fd.append(d, $scope.uploadAutos[d]) 
} 

$http({ 
    method: 'PUT', 
    url: `http://sitio.api.com/vehiculo/${parseInt($routeParams.id, 10)}`, 
    data: fd, 
    headers: { 'Content-Type': 'undefined' } 
    }).then(success => { 
    console.log(success) 
    }, error => { 
    console.log(error) 
    } 
) 

這是,到目前爲止,我一直在努力做的GET和POST請求的方式,工作正常...但PUT ...嗯有什麼不工作。後端對於上面所說的是正確的,即使用rest api應用程序來測試我的所有url,PUT url正常工作。任何幫助將是偉大的:)。謝謝

+1

如果對返回的OPTIONS請求的響應是OK,那麼代碼應該在那之後正確地發送PUT請求。你能檢查後端對這個OPTIONS請求的響應是什麼嗎? –

回答

3

理想情況下,您會看到兩個請求 - 即OPTIONS請求,即飛行前請求。這是爲了驗證您的Cross Origin請求標頭。

驗證完成後,您的客戶端將能夠發出實際的POST/PUT請求。如果您的飛行前請求失敗,這意味着您的服務器上CORS請求標頭設置不正確。

以下頭需要進行設置:

Access-Control-Allow-Origin 
Access-Control-Allow-Methods ("GET, POST, PUT, DELETE, OPTIONS") 
Access-Control-Allow-Headers 
Access-Control-Max-Age 
1

這就是我一直在尋找飛行前的字!大聲笑。好的,我已經有了工作。第一。我身邊缺乏信息。所以我意識到這個問題不在角度上,不在我的後端,問題在於瘦身php的文檔和我的知識。 WHE您使用PUT或DELETE成圖功能,你必須添加的選項,這是因爲

Mozilla有答案

的跨來源資源共享標準的作品,通過添加新的HTTP 標頭允許服務器描述允許使用Web瀏覽器讀取該信息的一組起始。此外, 對於可能導致用戶數據產生副作用的HTTP請求方法(特別是對於 ,對於GET以外的HTTP方法或對於某些MIME類型的 POST使用),規範要求瀏覽器 「預檢」請求通過HTTP OPTIONS請求方法從服務器 請求支持的方法,然後在從服務器「批准」 時,發送實際請求與實際HTTP請求 方法。服務器還可以通知客戶端 (包括Cookie和HTTP驗證數據)是否應該以 請求發送「憑證」。