Ошибка CORS при использовании Angular 7 в качестве интерфейса, Backend в качестве Java

Я запускаю два приложения на своем локальном рабочем столе.

Один построен на Java, который служит API, другой построен на Angular, который является интерфейсным приложением.

Я пытаюсь получить доступ к внутренним данным из Angular, и у меня возникает ошибка:

Access to XMLHttpRequest at 'http://localhost:8080' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

 public getMethod(): Observable<Availability[]> {
    return this.http
    .get(API_URL)
      .map(response => {

      })
      .catch(this.handleError);
  }

Я делаю что-то подобное в Angular, чтобы получить данные, и ошибка продолжает появляться.

Мой вопрос: это угловая ошибка или ошибка Backend (Java)?

какой фреймворк вы используете в своем бэкенде?

s_bighead 14.03.2019 21:18

100% ошибка бэкенда. Либо используйте обратный прокси-сервер для размещения вашего API в том же домене, либо отключите заголовки CORS.

Woohoojin 14.03.2019 21:24
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
1 086
3

Ответы 3

Это ошибка бэкэнда. Вы должны разрешить cors на вашем java-сервере. Проверить это

Простой способ сделать http-запрос локально — установить расширение cors в браузере.

Например, если вы используете Google Chrome, установите его:

Расширение Allow-Control-Allow-Origin

Итак, включите корс, нажав на кнопку, и сделайте запрос :)

Создайте proxy.conf.json в корне вашего проекта рядом с package.json.

Вот пример.

{
    "/service/*": {
        "target": "http://localhost:8080",
        "changeOrigin": true
    }
}

Добавьте proxy.conf.json к serveoptions в angular.json. Как в:

 "serve": {
          "builder": "@angular-devkit/build-angular:dev-server",
          "options": {
            "browserTarget": "app:build",
            "proxyConfig": "proxy.conf.json"
          },
          "configurations": {
            "production": {
              "browserTarget": "app:build:production"
            }
          }
        }

Вот и все. Просто ng serve как вы обычно делаете, и вы можете начать проксировать на свой сервер. Убедитесь, что вы не предлагаете host url вручную в своих http звонках. Просто запросите у /service.

Другие вопросы по теме