Я разрабатываю приложение Angular2. Кажется, что, когда мой токен доступа истекает, код статуса 401 HTTP изменяется в значение 0 в объекте Response. Я получаю 401 Unauthorized, но объект ответа ERROR имеет статус 0. Это мешает мне захватить ошибку 401 и попытаться обновить токен. Что заставляет код статуса 401 HTTP быть изменен в код состояния HTTP 0?
Вот скриншот из консоли Firefox:
Здесь мой код:
get(url: string, options?: RequestOptionsArgs): Observable<any>
{
//console.log('GET REQUEST...', url);
return super.get(url, options)
.catch((err: Response): any =>
{
console.log('************* ERROR Response', err);
if (err.status === 400 || err.status === 422)
{
return Observable.throw(err);
}
//NOT AUTHENTICATED
else if (err.status === 401)
{
this.authConfig.DeleteToken();
return Observable.throw(err);
}
else
{
// this.errorService.notifyError(err);
// return Observable.empty();
return Observable.throw(err);
}
})
// .retryWhen(error => error.delay(500))
// .timeout(2000, new Error('delay exceeded'))
.finally(() =>
{
//console.log('After the request...');
});
}
Этот код находится в пользовательской службе http, которая расширяет Angular2 HTTP, поэтому я могу перехватывать ошибки в одном месте.
В Google Chrome я получаю следующее сообщение об ошибке:
XMLHttpRequest не может загрузить https://api.cloudcms.com/repositories/XXXXXXXXXXXXXXXX/branches/XXXXXXXXXXXXXXXX/nodesXXXXXXXXXXXXXXXX. В запрошенном ресурсе нет заголовка "Access-Control-Allow-Origin". Origin 'http://screwtopmedia.local.solutiaconsulting.com', следовательно, не допускается. В ответе был код статуса HTTP 401.
Это запутанно, потому что я включаю заголовок "Access-Control-Allow-Origin" в запросе.
Вот изображение результатов, полученных в Google Chrome:
Я попытался получить доступ к заголовку ответа WWW-Authenticate в качестве средства для ловушки для 401. Однако следующий код возвращает NULL:
err.headers.get("WWW-Authenticate")
Непонятно, что я получаю проблему CORS, потому что я не получаю ошибок CORS, когда предоставляется действительный токен доступа.
Как мне ловушка для кода состояния 401 HTTP? Почему 401 код статуса HTTP изменяется на 0?
Спасибо за вашу помощь.