2015-01-16 170 views
0

我在CORS場景中從Javascript調用了我的RESTful API。在AJAX CORS請求中僅附加了一次授權標頭

我正在使用JQuery發送我的POST驗證請求。 下面是一個例子:

function post(settings, addAccessToken) { 
     settings.type = 'POST'; 
     settings.cache = false; 
     if (settings.dataType === undefined) 
      settings.dataType = 'json'; 
     if (addAccessToken) { 
      settings.xhrFields = { withCredentials: true }; 
      settings.beforeSend = function (request) { 
       request.setRequestHeader('Authorization', 'Bearer <my access token>'); 
      }; 
      settings.headers = { 
       'Authorization': 'Bearer <my access token>' 
      }; 
     } 
     return $.ajax(settings); 
    } 

在服務器端,我可以看到第一個呼叫與「授權」頭正確估值的到來,而所有其他沒有這樣的標題。

我錯過了什麼?

謝謝

你cghersi

回答

2

我解決我的問題,所以我想給的答案,別人都在同樣的情況。

1)問題是從服務器端啓用OPTIONS http請求。事實上,第一次調用相同的url,但是使用動詞「OPTIONS」,然後使用POST | GET方法調用第二次調用。如果服務器沒有正確回答第一個「選項」呼叫,例如指定正確的允許標題等,第二個調用不起作用。

2)的符號

settings.headers = { 
'Authorization': 'Bearer <my access token>' 
}; 

不工作。設置標題的唯一方法是:

settings.beforeSend = function (request) { 
request.setRequestHeader('Authorization', 'Bearer <my access token>'); 
}; 

希望這可以幫助其他人在未來。

cghersi