我正在尝试请求需要使用令牌进行身份验证的其余API。构造Request对象时,某些标头会消失。 为什么我不能设置授权标头?
let http_headers = {
"Content-type": "application/json",
'Authorization': 'Token token='+my_token,
'Accept': 'Application/json'
};
let url = this.base_url + '/api/v1/test';
let init = {
method: "POST",
headers: new Headers(http_headers),
mode: 'no-cors',
credentials: 'omit' // I try that, but it doesn't seem to have effect
};
let req = new Request( url, init );
console.log(req.headers.get("Accept")); // Application/json
console.log(req.headers.get("Authorization")); // null, why ?
答案 0 :(得分:3)
请参阅mode的文档
no-cors
— 防止该方法成为除HEAD,GET或POST之外的任何内容,并使该标题成为除简单标头之外的任何内容。如果有任何ServiceWorkers截获这些请求,则除了简单的标头外,它们不得添加或覆盖任何标头。此外,JavaScript可能无法访问所得Response的任何属性。这样可以确保ServiceWorkers不会影响Web的语义,并防止由于跨域泄漏数据而引起的安全和隐私问题。
将模式设置为same-origin
或cors
以允许设置凭据。
答案 1 :(得分:0)
您可能想使用fetch函数并在options参数中设置标题。
fetch(url, { //fetch options
method: "POST", // *GET, POST, PUT, DELETE, etc.
mode: "cors", // no-cors, cors, *same-origin
cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached
credentials: "same-origin", // include, *same-origin, omit
headers: {
"Content-Type": "application/json",
// Your headers here
},
body: JSON.stringify(data), // body data type must match "Content-Type" header
})
.then(); // parse response
从https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch借来的
fetch函数返回一个Promise,该Promise将包含包含来自api的数据的Response对象。