5

我想對GroupMe API進行API調用來獲取JSON響應,但一直得到以下錯誤:請求標頭字段X-CSRFToken不允許通過訪問控制允許頭部中的預檢響應

XMLHttpRequest cannot load ...(call url)... 
Request header field X-CSRFToken is not allowed by Access-Control-Allow-Headers in preflight response. 

我的JavaScript看起來像這樣:

var xmlhttp = new XMLHttpRequest(); 
var url = (call url) 

xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 

    xmlhttp.open("GET", url, true); 
    xmlhttp.setRequestHeader("Access-Control-Allow-Headers", "*"); 
    xmlhttp.setRequestHeader('Access-Control-Allow-Origin', '*'); 

    $.getJSON(url, function(data){ 
     var array = data.response.messages.reverse(); 
     for(i = 0; i<array.length; i++){ 
      $('.messages').append("<div class='message'>"+array[i].name+":<br>"+array[i].text+"</div>"); 
     } 
    }); 
    } 
} 

xmlhttp.open("GET", url, true); 
xmlhttp.send(); 

我真的不明白請求頭是如何工作的,所以我猜我沒有正確設置標頭。有人能指出我正確的方向,我可以如何設置標題來解決這個問題嗎?

+0

你不需要搞亂那些來自客戶端的頭文件,那些服務器響應頭文件。確保你的服務器在ACAH中的「X-CSRFToken」白名單,如果它是響應的一部分。 – dandavis

+1

哦,我們JSers也沒有實際做出預檢,瀏覽器爲我們做了這個,讓我們的「常規屁股」Ajax工作,如果它通過... – dandavis

回答

5

     如果您正在爲第三方服務器的呼叫,對預檢要求,將response header應該包含Access-Control-Allow-Headers: X-CSRF-Token擺脫你的錯誤的。但我們無法控制它。

     這是完全在我們的控制下,如果呼叫到我們的服務器,在那裏你可以在響應您的預檢要求這情況下是OPTIONS型的,如果你要發送一個ajax jQuery requestcrossDomain parameter set to true添加 Access-Control-Allow-Headers: X-CSRF-Token做。

+0

謝謝!添加Access-Control-Allow-Headers:X-CSRF-Token,Content-Type完成了任務! – Ben

+1

我應該把它放在axios中? –

相關問題