2017-08-07 74 views
1

我已經使用過AngularJS中的一些以前的API,但總是使用OPTIONS方法進行預檢。現在我從頭開始構建一個新的API,出於某種原因,AngularJS不會發送預檢請求。Chrome不執行預檢請求

從我所經歷的AngularJS總是發出預檢時使用CORS,但不是在我的情況。所以問題是,如果AngularJS沒有請求一個與AngularJS不同的域名,那麼在AngularJS中觸發一個預檢是什麼?

我有這個例子是很容易的,看起來像這樣:

$scope.submit = function() { 
    $http.post('https://slimapi.devz/') 
    .then(function successCallback(response){ 
     alert(response.data); 
    }, function errorCallback(response) { 
     console.log(response); 
    }); 
} 

的請求URL是https://slimfrontend.devz/

Chrome被XHR中的響應頭與POST方法觸發,並且不會顯示結果,但是結果正在被提取(如時間線中所示)。但是,再次,沒有跡象顯示飛行前飛行。

下面是我的請求的樣子,如箭頭所示。 Chrome確實檢測到原點的不匹配。

timeline view

+0

Angular不負責發送預檢檢查,即瀏覽器。 – MinusFour

+0

@MinusFour,哦...這是集成在AngularJS中。那麼Chrome家族不會發送預檢? – PhyCoMath

+0

你怎麼知道它沒有發送?數據在哪裏發送? – charlietfl

回答

2

MDN has a good description

特別地,一個請求被預檢如果滿足下列條件爲真:

(I套用以下的其餘部分)

  • 如果請求使用以下任何一項克方法(如PUT)
  • 如果特定的HTTP標頭由JS設置
  • 如果Content-Type不是一個HTML <form>

IIRC的enctype屬性的有效值,角默認發送application/json有效載荷(這觸發了上述最終條件)。

你的例子是一個POST請求,你不發佈任何數據(這是奇怪的),所以沒有內容類型。

+0

這真的可以解釋很多的話......我從來沒有真的很確定預檢條件。謝謝! :) – PhyCoMath