为什么获取请求会导致服务器返回403而XMLHttpRequest没有?

时间:2017-03-20 07:06:14

标签: javascript xmlhttprequest fetch

我使用以下代码使XMLHttpRequest从服务器获取json值:

let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    let msg = JSON.parse(xhr.responseText);
    // Send the request to our POST Servlet
  }
};

xhr.open("GET", "/libs/granite/csrf/token.json", true);
xhr.send();

但是,我想在我的代码中使用fetch,但是,在尝试下面的代码时,我立即回答了403错误:

fetch("/libs/granite/csrf/token.json", { method: "GET" })
.then((response: any) => {
  if (response.status === 200 || response.statusText === "OK") {
    callback(ResponseCode.SUCCESS);
  } else {
    callback(ResponseCode.ERROR);
  }
})
.catch((error: any) => {
  callback(ResponseCode.ERROR);
});

我想知道两者之间的区别以及应该修改哪些内容以使fetch正常工作。

1 个答案:

答案 0 :(得分:3)

如果服务器端有凭据验证,则可能失败,因为提取不会发送或接收cookie。你必须做 -

credentials:'include'

在您的获取请求中,根据Fetch上的mozilla文档

  

默认情况下,fetch不会从服务器发送或接收任何Cookie,   如果站点依赖,则会导致未经身份验证的请求   维护用户会话(发送cookie,凭证头   必须发送。)

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch