почему я не могу установить некоторые заголовки для объекта запроса? - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь запросить 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 ]

3 голосов
/ 23 апреля 2019

См. Документацию для режима

no-cors - Предотвращает метод от чего-либо, кроме HEAD, GET или POST, и от заголовков, отличных от простых заголовков . Если какие-либо ServiceWorkers перехватывают эти запросы, они не могут добавлять или переопределять никакие заголовки, кроме тех, которые являются простыми заголовками. Кроме того, JavaScript может не иметь доступа к каким-либо свойствам полученного ответа. Это гарантирует, что ServiceWorkers не влияет на семантику Интернета, и предотвращает проблемы безопасности и конфиденциальности, возникающие при утечке данных между доменами.

Установите режим на same-origin или cors, чтобы разрешить установку учетных данных.

0 голосов
/ 23 апреля 2019

Возможно, вы хотите использовать функцию извлечения и установить заголовки в параметре параметров.

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, в котором будет объект Response, содержащий данные из вашего API.

...