Запрос к АПИ SpeechKIT не работает(401) — где ошибка?

запрос к Яндекс. SpeechKIT API через Браузер возвращает ошибку авторизации 401: введите сюда описание изображения

хотя аналогичный код для NodeJS работает. Не могу понять, в чём соль.

Документация Яндекса: описание метода АПИ

Мой Код:

let api_key = '***мой АПИ код*********';
    let params = new URLSearchParams();
const text = 'Привет!';
    params.append('text', text);
    params.append('voice', 'jane');
    params.append('emotion', 'good');
    params.append('lang', 'ru-RU');
    params.append('speed', '1.0');
    params.append('format', 'oggopus');
//================ кнопочка запроса ===================================
const fetchButton = document.getElementById("fetchButton");

fetchButton.onclick = ()=> {
    alert('кнопка нажата');
    fetch('https://tts.api.cloud.yandex.net/speech/v1/tts:synthesize', {
        method: 'POST',
        body: params,
        mode: "no-cors",            //иначе ругается
        headers: {
            //'Content-Type': 'application/x-www-form-urlencoded',
            'Authorization': 'Api-Key ' + api_key,
        },
    })
        .then(res => {
        console.log(`responce is ${res}`);
        // return res.json();
        //const dest = fs.createWriteStream('./octocat2.ogg');
        //res.body.pipe(dest);
    })
        .catch(err => console.error(`!!! + ${err} + !!!!!!!!`));
}


Ответы (1 шт):

Автор решения: Offllane

Поле mode со значением 'no-cors' позволяет использовать только ограниченный набор заголовков в запросе. А именно:

  Accept;
  Accept-Language;
  Content-Language;
  Content-Type (с некоторыми значениями).

Так как в запросе указано поле со значением 'no-cors', то браузер не добавляет заголовок Authorization. В результате чего вы получаете ошибку со статусом 401.

Это можно легко проверить удалив строчку

mode: "no-cors", //иначе ругается

и воспользовавшись браузером, в котором будут отключены CORSы.

Более подробно эта проблема описана здесь: https://stackoverflow.com/questions/43262121/trying-to-use-fetch-and-pass-in-mode-no-cors

→ Ссылка