2014-01-17 44 views
0

這是我使用jQuery的CORS輪流進入OPTIONS調用

$.ajax({ 
     type: "get", 
     url: "http://myserver.com", 
     beforeSend: function (xhr, data) { 
      xhr.setRequestHeader("Authorization", "xxxx"); 
     } 
}); 

當我檢查這種呼叫中螢火我看到選項,同時也看不出在請求頭授權代碼的樣本代碼。 CORS頭已添加到服務器端。

response.addHeader("Access-Control-Allow-Headers", "origin, content-type, accept, x-requested-with"); 
    response.addHeader("Access-Control-Max-Age", "60"); 
    response.addHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); 
    response.addHeader("Access-Control-Allow-Origin", "*");  
    response.addHeader("Access-Control-Allow-Credentials", "true"); 

想法是使用純粹的jQuery,如果它可以執行這樣的查詢。

+0

你在服務器端使用什麼? PHP? – RononDex

+0

@RononDex Java Spring,從PostMan嘗試過,其他工具可以作爲魅力。 – vaske

+0

你爲什麼要發送一個GET請求與身體? –

回答

3

由於您正在發送交叉源ajax請求並指定具有此GET請求的授權標頭,因此發生預檢(OPTIONS)。

此外(這不是一個問題)我建議刪除contentType選項。這在GET請求的上下文中沒有意義。 GET請求不應該有任何內容。所有數據都應包含在查詢字符串中,或​​者可能包含在標題中。

授權標頭不會與OPTIONS一起發送。您必須承認它在服務器端,然後瀏覽器將發送底層的GET。有關CORS的更多信息,請致電https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

+0

現在我不發送它,但仍然有同樣的問題。我試圖發送GET,但在控制檯中它變成了一個沒有標題的OPTION。 – vaske

+0

沒有GET調用它變成OPTION不知何故,並沒有設置頭...接受\t text/html,application/xhtml + xml,application/xml; q = 0.9,*/*; q = 0.8 接受-Encoding \t的gzip,緊縮 接受語言\t EN-US,EN; q = 0.5 訪問控制請求,他... \t授權 訪問控制請求,我... \t GET 連接\t保持-alive 主機\t stage.twingz.com 產地\t的http://本地主機 的User-Agent \t的Mozilla/5.0(Windows NT的6.1; WOW64; RV:26.0)的Gecko/20100101火狐/ 26.0 FirePHP/0.7.4 x-insight \t activate – vaske

+0

同樣,您的授權標頭不能也不會與OPTIONS請求一起發送。對此你無能爲力。 –