为什么我不能在Request对象上设置一些标题?

时间:2019-04-23 09:57:34

标签: javascript fetch-api request-headers

我正在尝试请求需要使用令牌进行身份验证的其余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 ?

2 个答案:

答案 0 :(得分:3)

请参阅mode的文档

  

no-cors防止该方法成为除HEAD,GET或POST之外的任何内容,并使该标题成为除简单标头之外的任何内容。如果有任何ServiceWorkers截获这些请求,则除了简单的标头外,它们不得添加或覆盖任何标头。此外,JavaScript可能无法访问所得Response的任何属性。这样可以确保ServiceWorkers不会影响Web的语义,并防止由于跨域泄漏数据而引起的安全和隐私问题。

将模式设置为same-origincors以允许设置凭据。

答案 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对象。