Dimski
@Dimski
Программирование - мое хобби

CORS блокирует все запросы Angular. Как исправить?

Доброго времени суток!

Столкнулся с очень странной проблемой, на банально простые запросы браузер стал их все блокировать.
Высылаю запрос:
this.http.get('http://localhost:3000')
      .subscribe(res => console.log(res))


Получаю ошибку:
Access to XMLHttpRequest at 'localhost:3000' from origin 'localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Даже если добалю заголовок:
this.http.get('http://localhost:3000', {
      headers: {
        'Access-Control-Allow-Origin': '*'
      }
    })
      .subscribe(res => console.log(res))


Или таким образом:
this.http.get('http://localhost:3000', {
      headers: new HttpHeaders({
        'Access-Control-Allow-Origin': '*'
      })
    })
      .subscribe(res => console.log(res))


Получаю ошибку:
Access to XMLHttpRequest at 'localhost:3000' from origin 'localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Я просто не могу понять от куда она может взяться и как ее решить, ведь в других проектах все работало.

Прошу помочь с этой ересью.
  • Вопрос задан
  • 10662 просмотра
Решения вопроса 1
Вы шлете запрос с localhost:4200 на localhost:3000 для того, чтобы менеджить такие запросы сервер должен поддерживать CORS, очевидно у вас не поддерживает.
Очень плохо не знать матчасть
https://developer.mozilla.org/en-US/docs/Web/Secur...

Попробуйте настройть прокси у ng cli
https://juristr.com/blog/2016/11/configure-proxy-a...
https://github.com/angular/angular-cli/pull/1896
https://itnext.io/angular-cli-proxy-configuration-...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Horny_515
@Horny_515
У Вас не поддерживается cors настороне сервера. Судя по порту 3000 могу предположить, что Вы используете Express (nodeJS) + Angular

Если я прав то Вам необходимо добавить импорт
const cors = require('cors')
Затем установить корс - npm install

Затем в сами запросы API добавить
res.statusCode = 200;
res.setHeader('Content-Type', "application/json"); //В моем случае я получаю json
res.setHeader('Access-Control-Allow-Origin', "*"); //Либо конкретный хост (поддерживается группа в виде массива)
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); //Необходимые типы запросов
res.setHeader('Access-Control-Allow-Credentials', true); //Означает, что должен быть получен ответ
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

В конце перед указанием порта добавьте использование корс, чтобы вышло
app.use(cors())
app.listen(3000)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы