CORS POLICY проблема с текстом в речь Microsoft - PullRequest
2 голосов
/ 27 марта 2019

Когда я пытался связать текст с речью Microsoft, я получил эту ошибку:

Доступ к XMLHttpRequest по адресу https://westeurope.tts.speech.microsoft.com/' от происхождения 'http://localhost:4200' заблокирован политикой CORS: Ответ на предварительный запрос не проходит проверку контроля доступа: нет Заголовок «Access-Control-Allow-Origin» присутствует в запрошенном ресурс. Я естественно на Angular, и мой код такой:

this.http.post<any>('https://westeurope.api.cognitive.microsoft.com/sts/v1.0/issueToken', null, {headers: new HttpHeaders({'Ocp-Apim-Subscription-Key': '3e17428195894a8f9de3e76ee431ff80'})}).subscribe(
      () => {},
      (err) => {
        console.log(err.error.text);
        let body = '<speak version=\'1.0\' xmlns="https://www.w3.org/2001/10/synthesis" xml:lang=\'en-US\'><voice  name=\'Microsoft Server Speech Text to Speech Voice (en-US, Jessa24kRUS)\'>Welcome to Microsoft Cognitive Services <break time="100ms" /> Text-to-Speech API.</voice> </speak>';
        let headersSpeech = new HttpHeaders({
          'Authorization': 'Bearer ' + err.error.text,
          'cache-control': 'no-cache',
          'X-Microsoft-OutputFormat': 'riff-24khz-16bit-mono-pcm',
          'Content-Type': 'application/ssml+xml'
        });
        this.http.post<any>('https://westeurope.tts.speech.microsoft.com/', body, {headers: headersSpeech}).subscribe(
          (resultData) => console.log(resultData)
        );
      });

Да, как вы видите, Microsoft отправила мне сообщение об ошибке, когда я спрашиваю токен, но они отправили мне токен внутри текстовой ошибки (я тоже не понимаю). Я пробовал это решение:

let headersSpeech = new HttpHeaders({
      'Access-Control-Allow-Origin': 'http://localhost:4200/',
      'Access-Control-Allow-Methods': 'GET,PUT,POST,DELETE,OPTIONS',
      'Access-Control-Allow-Headers': '*',
      'Authorization': 'Bearer ' + err.error.text,
      'cache-control': 'no-cache',
      'X-Microsoft-OutputFormat': 'riff-24khz-16bit-mono-pcm',
      'Content-Type': 'application/ssml+xml'
    });

Но это не работает. Я думаю, что проблема исходит от Microsoft, но я хочу быть уверен.

1 Ответ

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

У вас проблемы с CORS:

Существует несколько способов решения этой проблемы

1) Отключите CORS.Например: как отключить cors в chrome

2) Использовать плагин для вашего браузера

3) Использовать прокси, такой как nginx, пример того, как настроить

Более подробно вы пытаетесь получить доступ к api.serverurl.com с локального хоста.Это точное определение междоменного запроса.

Отключив его, просто чтобы выполнить свою работу (хорошо, поставьте плохую защиту для вас, если вы посещаете другие сайты и просто пинаете банку в будущем), выможет использовать прокси, который заставляет ваш браузер думать, что все запросы поступают с локального хоста, когда на самом деле у вас есть локальный сервер, который затем вызывает удаленный сервер.

, так что api.serverurl.com может стать localhost: 8000 / api и вашим локальнымnginx или другой прокси-сервер отправит в правильный пункт назначения.

...