使用CORS请求获取和XHR之间的区别

时间:2018-08-23 14:43:06

标签: javascript xmlhttprequest fetch-api

我正在测试我正在开发的API中的新端点,并且通过将一个快速HTML页面放在一起来进行此操作,该页面使用fetch发出了CORS请求。大概是这样:

let headers = {
    'Authorizaton': 'Bearer ' + token,
    'Content-type': 'application/json',
    'Accept': 'application/json'
};

fetch(url, {
    method: 'POST',
    mode: 'cors',
    credentials: 'include',
    headers: headers,
    body: JSON.stringify(data)
}).then(resp => resp.json())
.then(function (search) {
    console.log('done sending ajax request');
    console.log(search);
});

我之前使用fetch进行了未经身份验证的请求,没有任何问题。我还使用Postman,curl或httpie进行了很多身份验证请求,没有任何问题,但是这次,我的服务器响应为401。我认为也许Authorization标头实际上并未发送,但是我做了一点挖掘,就是这样。

最终,我决定进入邮递员,并提出相同的请求,此请求成功了。从邮递员那里,我复制了XHR代码,然后对其进行了一些微调,以得到如下所示的内容:

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
    if (this.readyState === 4) {
        console.log('done sending ajax request');
        console.log(this.responseText);
    }
});

xhr.open("POST", url);
for (let header in headers) {
    xhr.setRequestHeader(header, headers[header]);
}

xhr.send(JSON.stringify(data));

因此,标题和正文完全相同,但是使用XHR,成功了。

我检查了“网络”选项卡,对获取请求和XHR请求之间的请求标头进行了比较,除了标头(用于提取的authorizationAuthorization对于XHR),一切似乎都是相同的。我仔细检查了该应用程序是否检查大小写。不是。

那么,在使用访存和使用XMLHttpRequest时,发送请求的方式还有其他不同之处吗?

0 个答案:

没有答案
相关问题