2016-02-15 2 views
4

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

я пытался справиться с этим делать

 switch (response.status) { 
     case 0: 
      break; 
     case -1: 
      break; 
     case 401: 
      localStorageService.clearAll(); 
      redirectToUrlAfterLogin.url = $location.path(); 
      $location.path('/login'); 

которая была предложена в AngularJS Issue #12920

Мы, безусловно, становится меньше журналов в, но все еще есть некоторые коды HTTP -1 статус. Есть ли другой способ, которым я должен обрабатывать -1?

ответ

2

Когда запрос прерывается или истекает время, запрос присваивается как ошибка со статусом -1.

Взятые из the official docs:

Кроме того, коды статуса меньше, чем -1 нормализованы к нулю. -1 обычно означает, что запрос был прерван, например. используя config.timeout.

timeout – {number|Promise} - тайм-аут в миллисекундах или обещание, что должен прервать запрос при его разрешении.

1

По моему опыту, наиболее распространенной причиной статуса -1, является то, что браузер блокировал ответ из-за нарушения Same Origin Policy.

По соображениям безопасности, браузеры ограничивают кросс-происхождения HTTP запросы инициировано в скриптах. Например, XMLHttpRequest и Fetch следует за same-origin policy. Таким образом, веб-приложение, использующее XMLHttpRequest или Fetch, могло только сделать HTTP-запросы в своем собственном домене. Чтобы улучшить веб-приложения, разработчики попросили поставщиков браузеров разрешить междоменные запросы.

Крест-Origin Resource Sharing (CORS) механизм дает веб-серверы управления доступом между доменами, которые позволяют безопасную передачу данных между доменами. Современные браузеры используют CORS в контейнере API - например, XMLHttpRequest или Fetch - для снижения рисков HTTP-запросов с кросс-началом.

См. Use CORS to allow cross-origin access.