Если у вас есть правильный заголовок Cors на месте. Ваша корпоративная сеть может быть удалена из заголовка cors. Если веб-сайт доступен извне, попробуйте получить к нему доступ из-за пределов вашей сети, чтобы проверить, является ли сеть причиной проблемы - хорошая идея независимо от причины.

ользую Angular 4HttpClient отправлять запросы на внешний сервис. Это очень стандартная настройка:

this.httpClient.get(url).subscribe(response => {
  //do something with response
}, err => {
  console.log(err.message);
}, () => {
  console.log('completed');
}

Проблема в том, что при сбое запроса я вижу общийHttp failure response for (unknown url): 0 Unknown Error сообщение в консоли. Между тем, когда я проверяю неудавшийся запрос в Chrome, я вижу, что статус ответа 422, а на вкладке «Предварительный просмотр» я вижу фактическое сообщение, описывающее причину сбоя.

Как получить доступ к фактическому ответному сообщению, которое я вижу в инструментах Chrome Dev?

Вот скриншот, демонстрирующий проблему:

 Mehdi Benmoha08 нояб. 2017 г., 15:46
Или лучше {"headers": {"normalizedNames": {}, "lazyUpdate": null, "headers": {}}, "status": 0, "statusText": "Unknown Error", "url": null, «ok»: false, «name»: «HttpErrorResponse», «message»: «Http-ответ об ошибке (неизвестный URL): 0 неизвестная ошибка», «error»: {«isTrusted»: true}}
 Pavel Agarkov08 нояб. 2017 г., 15:17
попробуйте войти целикомerr объект - не толькоmessage
 Mackelito14 мар. 2019 г., 11:41
Вы используете сервисный работник?
 Mehdi Benmoha08 нояб. 2017 г., 15:43
Я столкнулся с той же проблемой и собирался создать вопрос для этого, вот полный объект err:gist.github.com/GO3LIN/7cffc3b0aa1f24d3e23e28cc907237fc
 grdl08 нояб. 2017 г., 16:24
@PavelAgarkov, дело не только в регистрации сообщений. HttpErrorResponse, который я получаю, просто не содержит фактического сообщения об ошибке. ВотСкриншот проблемы. Вы можете видеть, что ошибка, которую я регистрирую, имеет сообщение «... неизвестная ошибка ...», но когда вы смотрите на предварительный просмотр ответа на запрос выше, вы можете увидеть фактическое, значимое сообщение.

Ответы на вопрос(10)

но не в Chrome при локальной разработке, и она была вызвана тем, что Firefox не доверял моему локальному APIССЛ сертификат (что недопустимо, но я добавил его в свой локальный магазин сертификатов, что позволило Chrome доверять ему, но не ff). Непосредственный переход к API и добавление исключения в Firefox устранило проблему.

 W9213 янв. 2019 г., 19:15
@frax, у меня был точно такой же случай! Спасибо! :)
 Aaron Jordan29 дек. 2018 г., 00:54
Я прошелнесколько CORS отвечает, и один за другим каждый не дает решения при использовании Firefox. Я посмотрел на этот пост и подумал: «Ни в коем случае это не так, но у меня нет идей, какого черта», и, конечно же, это сработало. Спасибо вам большое!

который создает мне прокси на портах 5000 и 5001, которые проходят через порт Angular 4200 во время разработки.

У меня была правильная настройка CORS для порта https 5001, и все было хорошо, но я случайно перешел к старой закладке, которая была для порта 5000. Затем внезапно это сообщение возникло. Как говорили другие в консоли, было сообщение об ошибке «предпечатная проверка».

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

если вы не предоставили действительный сертификат клиента и токен, который понимает ваш сервер:

Ошибка:

Http-ошибка ответа (неизвестный URL): 0 неизвестная ошибка

Пример кода:

import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError, map } from 'rxjs/operators';

class MyCls1 {

  constructor(private http: HttpClient) {
  }

  public myFunc(): void {

    let http: HttpClient;

    http.get(
      'https://www.example.com/mypage',
      {
        headers:
          new HttpHeaders(
            {
              'Content-Type': 'application/json',
              'X-Requested-With': 'XMLHttpRequest',
              'MyClientCert': '',        // This is empty
              'MyToken': ''              // This is empty
            }
          )
      }
    ).pipe( map(res => res), catchError(err => throwError(err)) );
  }

}

Обратите внимание, что обаMyClientCert & MyToken пустые строки, следовательно, ошибка.
MyClientCert & MyToken может быть любым именем, которое понимает ваш сервер.

Решение Вопроса

CORS, Я заметил, что в консоли Chrome произошла другая ошибка:

В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». ПроисхождениеHTTP: // локальный: 4200Поэтому не допускается доступ. Ответ имеет HTTP-код состояния 422.`

Это означает, что ответ от внутреннего сервера отсутствовалAccess-Control-Allow-Origin заголовок, даже если бэкэнд nginx был настроен на добавление этих заголовков к ответам сadd_header директива.

Однако эта директива добавляет заголовки только тогда, когда код ответа равен 20X или 30X. В ответах об ошибках заголовки отсутствовали. Мне нужно было использоватьalways параметр, обеспечивающий добавление заголовка независимо от кода ответа:

add_header 'Access-Control-Allow-Origin' 'http://localhost:4200' always;

Как только бэкэнд был правильно настроен, я мог получить доступ к фактическому сообщению об ошибке в коде Angular.

 InfZero23 мая 2018 г., 00:49
 Bobs25 мар. 2018 г., 11:35
также следующая ссылка может быть полезна для включения CORS:docs.microsoft.com/en-us/aspnet/web-api/overview/security/...

которые я пытался запросить. Выяснили, отладив ответ, который потерпел крах в отношении.

сеть может быть удалена из заголовка cors. Если веб-сайт доступен извне, попробуйте получить к нему доступ из-за пределов вашей сети, чтобы проверить, является ли сеть причиной проблемы - хорошая идея независимо от причины.

эта ошибка иногда появляется из-за чего-то, что блокирует http в браузере

 Andrew07 сент. 2018 г., 11:42
Это тоже исправило мою проблему, спасибо!

Произошло необработанное исключение при выполнении запроса. Newtonsoft.Json.JsonSerializationException: обнаружен самоссылающийся цикл с типом ...

Клиент сказал:

POST http://localhost:61495/api/Action net::ERR_INCOMPLETE_CHUNKED_ENCODING
ERROR HttpErrorResponse {headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: null, ok: false, …}

Упрощение типа ответа за счет устранения петель решило проблему.

как другие вопросы, но я только что боролся с этим в приложении Ionic-Laravel, и ничего не работает отсюда (и другие посты), поэтому я установилhttps://github.com/barryvdh/laravel-cors Дополнение в Laravel и началось, и это работает довольно хорошо.

отредактируйте файл .htaccess, просто вставив этот код, чтобы решить проблему CROS в вашем Angular или IONIC-проекте.

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
 itmuckel19 февр. 2018 г., 11:24
Вы никогда не должны позволять "*"! В общем, вы знаете, кто общается с вашим бэкэндом, и вы должны явно указать их хост.
 Martin25 июн. 2018 г., 01:47
@itmuckel, но если вы делаете приложение для андроид хоста, это неизвестно. Будут ли все мобильные телефоны, которые потребляют ваши услуги, я прав?
 user32377431 авг. 2018 г., 00:07
нам нужно было использовать cordova-plugin-advanced-http и обертку @ ionic / native, чтобы получать http-вызовы с устройства вместо использования ajax-вызова через браузер. @Мартин

Ваш ответ на вопрос