HttpClient.get для чтения файла - PullRequest
1 голос
/ 13 октября 2019

С клиента Angular 8 я хочу прочитать файл, расположенный по адресу: C: \ inetpub \ wwwroot IIS работает. Я использовал следующий код и получил эту ошибку:

Доступ к XMLHttpRequest в «http://localhost/MyFile.xml' от источника» http://localhost:4200' заблокирован политикой CORS: Нет «Access-Control-Allow»Заголовок -Origin присутствует в запрошенном ресурсе.

В конфигурации IIS я добавил: Access-Control-Allow-Origin, * to: Заголовки ответа HTTP.

Но я получил вышеупомянутую ошибку также, когда IIS был остановлен.

Не могли бы вы объяснить, что не так?

Заранее спасибо, Звика

let headers = new HttpHeaders;
headers.append ('Access-Control-Allow-Origin','*');
this.http.get ('http://localhost:80/dwell.xml',{headers: 
headers}).subscribe(
  (val) => {
      console.log("GET call successful value returned in body", 
                  val);
  },
  response => {
      console.log("GET call in error", response);
  },
  () => {
      console.log("The GET observable is now completed.");
  });

Ответы [ 2 ]

1 голос
/ 13 октября 2019

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

Я вижу, вы пытались установить заголовок'Access-Control-Allow-Origin','*' в вашем запросе, но это не сработает. Браузер будет действительно принимать заголовок только в том случае, если он впервые авторизован API, с которым общается ваше приложение (как описано в этой статье Википедии)

Если у вас угловое приложение, общающееся с APIдругого домена (или другого порта в том же домене, в вашем случае), который необходим API для авторизации запроса CORS;в противном случае браузер, работающий под углом, выдаст ошибку «заблокировано политикой CORS». Это не только для угловых, но и для любого запроса от этого браузера, затрагивающего несколько доменов.

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

Чтобы настроить CORS в IIS, вам необходимо настроить модуль IIS CORS . Это должно быть так же просто, как добавить строки, описанные в этой ссылке конфигурации, и перезапустить IIS.

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

0 голосов
/ 13 октября 2019

Когда вы пытаетесь получить доступ к domain1.com из domain2.com изнутри, большинство современных браузеров отправляют запрос на сервер и проверяют, присутствует ли в ответе заголовок Access-Control-Allow-Origin.

Когда сервер не работает, браузер не может получить никакого ответа, поэтому этот запрос блокируется.

В целях разработки вы можете:

  1. Отключить CORS политики в браузере (в настройках или с помощью расширений).
  2. Поскольку вы работаете с Angular и, скорее всего, с npm, вы можете настроить прокси и затем просто отправлять запросы в основной домен. Сервер разработки перенаправит эти запросы в пункт назначения. Конфигурация углового прокси
  3. Отладка и правильная настройка веб-сервера таким образом, чтобы он возвращал правильные заголовки, также обратите внимание на домен, возвращенный с Access-Control-Allow-Origin
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...