我正在尝试一项我不了解的事情。当我尝试使用Fetch API设置请求的标头时,实际上没有定义标头。
这是一段代码,还有一个小提琴的链接,可以复制。
function createRequest(type, url, payload) {
const options = { headers: {
"Content-Type": "application/json",
"x-request-id": '...',
"x-sender-id": "mysender"
},
method: 'POST',
body: JSON.stringify(payload),
mode: 'no-cors',
cache: 'no-cache'
};
return new Request(url, options);
}
// -----------------------------
// a simple test
const request = createRequest('post', '/check', {test: 'where are my headers?'});
当我使用Headers
对象创建标题时,标题会丢失。即使我使用set
或append
方法填充标题也是如此。
按规定使用new Headers({...});
here不能解决问题。更改mode
也不会产生任何变化。
跟随this也会失败。
结果,没有定义标头(我也没有定义正文)。
如果有人对此问题有想法,我会考虑:D
致谢。
答案 0 :(得分:1)
由于您使用的是mode: 'no-cors'
,因此您只能使用simple headers
这是在无核条件模式下允许使用的所有标头
下面,第一个请求的模式为no-cors,第二个请求的模式相同(尽管这也可能是cors,并且工作原理相同)
// Code goes here
function createRequest(type, url, payload, corsmode) {
const options = {
headers: {
"Content-Type": "application/json",
"x-request-id": '...',
"x-sender-id": "mysender"
},
method: 'POST',
body: JSON.stringify(payload),
mode: corsmode,
cache: 'no-cache'
};
return new Request(url, options);
}
// -----------------------------
// a simple test
const request = createRequest('post', '/check', {
test: 'where are my headers?'
}, 'no-cors');
console.log([...request.headers.entries()]);
const request2 = createRequest('post', '/check', {
test: 'where are my headers?'
}, 'same-origin');
console.log([...request2.headers.entries()]);