2015-02-23 187 views
6

看起來jQuery不會在POST請求(或其他類型)之前發送OPTIONS請求時沿Authorization標頭髮送消息。我試圖達到的服務器返回了OPTIONS請求的401狀態 - 我如何強制jQuery包含Authorization標題,即使在這個初始請求中?jQuery.ajax不會發送帶有OPTIONS請求的授權標頭

$.ajax({ 
    type: "POST", 
    url: url, 
    data: postData, 
    beforeSend: function ajaxBeforeSend(jqXHR) { 
     jqXHR.withCredentials = true; 
     jqXHR.setRequestHeader("Authorization", "Basic " + btoa(encodeURIComponent(escape($username.val())) + ":" + encodeURIComponent(escape($password.val())))); 
    }, 
    success: runReportUrlCallback, 
    error: runReportErrorCallback 
}); 

我也嘗試添加usernamepassword到AJAX選項,但無濟於事。

+0

可能的重複[爲什麼在Chrome瀏覽器中運行經過身份驗證的CORS請求的預檢OPTIONS請求,而不是Firefox?](http://stackoverflow.com/questions/15734031/why-does-the-preflight-options-request -of-an-authenticated-cors-request-in-in) – suish 2015-02-23 05:48:20

+0

看起來像是讓服務器不需要對OPTIONS請求進行認證是修復它的唯一方法。 – suish 2015-02-23 05:49:54

+0

我不「擁有」服務器。這是第三方網絡服務。 – 2015-02-23 05:52:24

回答

3

看來,沒有考慮OPTIONS請求,第三方服務器配置不正確。

W3指出預檢OPTIONS請求必須:

排除用戶憑據。

用戶憑證被定義:

術語用戶證書對於本說明書的目的而言是指餅乾,HTTP認證,和客戶端的SSL證書

參見https://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0

如果服務器在您的控制之下,那麼您只需將OPTIONS請求處理程序放在auth檢查之前。

如果服務器不在您的控制範圍內(這似乎是這種情況),那麼您向服務器管理員呻吟,說明他們做錯了,並希望他們改變它。

相關問題