【发布时间】:2016-02-18 11:38:02
【问题描述】:
我正在尝试对 GroupMe API 进行 API 调用以获取 JSON 响应,但收到以下错误:
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();
我不太了解请求标头是如何工作的,所以我猜我没有正确设置标头。有人可以指出我如何设置标题来解决此问题的正确方向吗?
【问题讨论】:
-
您不需要弄乱来自客户端的那些标头,那些是服务器响应标头。如果它是响应的一部分,请确保您的服务器在 ACAH 中将
X-CSRFToken列入白名单。 -
哦,我们 JSers 实际上也不会进行预检,浏览器会为我们做这些,如果通过了,我们的“常规”ajax 就可以工作......
标签: javascript xmlhttprequest csrf access-control request-headers