我正在测试我正在开发的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请求之间的请求标头进行了比较,除了标头(用于提取的authorization
,Authorization
对于XHR),一切似乎都是相同的。我仔细检查了该应用程序是否检查大小写。不是。
那么,在使用访存和使用XMLHttpRequest时,发送请求的方式还有其他不同之处吗?