2013-10-07 3 views
5

Мы реализуем приложение на основе AngularJS, которое использует веб-службу отдыха, размещенную в другом домене. Следующий сценарий используется для CORS, и он отлично работает на Chrome и FireFox. Это проблема в IE9 и Safari при аутентификации. Кажется, проблема связана с атрибутом withCredentials в этих браузерах. Есть ли другой способ, которым IE и Safari поддерживает CORS?Проблема в атрибуте this.withCredentials в распределении ресурсов Cross Origin

<script type="text/javascript"> 
    XMLHttpRequest.prototype.realSend = XMLHttpRequest.prototype.send; 
    XMLHttpRequest.prototype.send = function(vData) { 
     this.withCredentials = true; 
     this.realSend.apply(this, arguments); 
    }; 
</script> 
+0

Если вы спрашиваете о проверенных запросах на кросс-поиск в IE9 или старше, ответ «не поддерживается». Эти браузеры имеют ограниченную поддержку CORS через XDomainRequest. –

+0

Nop. Я прошу версии IE10 + – Shanaka

ответ

7

В соответствии с различными сценариями, которые мы пробовали, мы могли бы составить следующее резюме. Надеюсь, это было бы полезно.

  1. Согласно спецификации браузера IE10 + и Safari 4+ версии поддерживает XHR и атрибутов withCredentials.
  2. Это может использоваться для CORS без каких-либо проблем, как в приведенном выше сценарии.
  3. Для других версий IE (9-) нам необходимо использовать XDR.
  4. URL-код перезаписи не был успешным с серверной стороны, когда он подходит к HTTPS.

Решение было очень простым. По умолчанию IE и Safari отключили сторонние файлы cookie. Поскольку мы используем два разных домена, когда пользователь вводит учетные данные для входа в систему, эти браузеры не смогли сохранить этот файл cookie. Из-за этого все остальные запросы были несанкционированными.

шаги для разрешения 3-го печенье группы эффектом

  • IE 10 - Свойства обозревателя> Конфиденциальность> Дополнительно> Сторонние Cookies> Accept
  • Safari - Настройки> Безопасность> Блок Куки> Никогда

Из-за этой проблемы мы обнаружили, что в версии AngularJS версии 1.1.1+ они упростили настройку значения «withCredentials» в модуле «config» ( $ httpProvider.defaults.withCredentials = true;)

Смежные вопросы