Запрос к АПИ 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 шт):
Поле 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