2014-04-08 38 views
1

我已經看到,角(1.2.17)發送OPTION請求,如果我們在ajax(與$ http)的另一個域上設置一些自定義標頭。 我知道這是RFC某處的某個部分(不需要指出),但我會強制發送實際請求,因爲用戶將在非洲某地的3G網絡後面(並且您猜測OPTION標題將會不行)。角力禁用CORS

所以這個問題肯定是在客戶端,因爲$ .ajax的作品,而不是$ http。 我在這個問題上看到了stackoverflow中的其他線程,但我不想配置服務器端,我想在角度上在客戶端禁用它。 (請不要暗示這一點)。

我所看到的useXDomain選項什麼都不做,domainWhiteList也不起作用。 有什麼辦法可以完全禁用這個東西嗎? (或者我將不得不使用jQuery來代替ajax部分)。

+0

是否與Firefox或僅與鉻發生的請求頭之間是什麼? – alonisser

+0

我發佈了10分鐘後的答案,我發佈了這個問題,我正在處理這個問題一整天...... 所以顯然這確實直接在瀏覽器中實現,而JQuery工作的原因是因爲有沒有自定義標題(和「授權」似乎是自定義標題的一部分,這就是角度請求失敗的原因)。 這裏唯一的解決方案是創建一個代理請求在同一個域上...... – user3510082

+0

由於某些原因,它似乎可以在chrome上使用空POST – user3510082

回答

2

直接不是AngularJS會執行OPTION請求,它是由XHR完成的。您可以檢查the AngularJS source,AngularJS沒有明確執行OPTION請求。

  • 它使用比GET,HEAD或POST的其它方法:

    根據MDN,XHR第一時執行一次OPTION請求。此外,如果POST用於發送具有除 application/x-www-form-urlencoded,multipart/form-data或text/plain之外的內容類型的請求數據,例如 。如果POST請求使用 application/xml或text/xml將XML有效載荷發送到服務器,則會預先顯示該請求。

  • 它設置自定義首部的請求(例如請求使用的報頭,如X PINGOTHER)

我注意到AngularJS設置了POST請求application/json;charset=utf-8內容類型報頭。我會嘗試將其設置回text/plain

$httpProvider.defaults.headers.post = {'Content-Type': 'text/plain'} 

如果這不起作用,我建議你檢查的差異時,請求由$.ajax製成,一個接$http