Контроль доступа для межсайтовых запросов в Internet Explorer - PullRequest
9 голосов
/ 11 января 2010

Я пытаюсь сделать AJAX-вызов из нескольких доменов в один, который будет обрабатывать запрос. Включить кросс-домен в Firefox и Chrome было легко, установив заголовок на сервере обработки:

header("Access-Control-Allow-Origin: *");

Но это не помогает включить его в Internet Explorer. Когда я пытаюсь:

httpreq.send('');

останавливается с ошибкой Доступ запрещен.

Как это можно включить в Internet Explorer?

Ответы [ 6 ]

12 голосов
/ 13 июня 2012

Многое изменилось с тех пор, как я впервые опубликовал свое решение для CORS в IE7 и выше. Прежде всего, свойство jQuery $ .support.cors по умолчанию имеет значение true. Платформы .NET 4.0 и выше больше не поддерживают CORS, как реализовано в версиях 3.5.1 и ниже. При написании веб-службы с ASP.NET 4.0 я установил модель Thinktecture.IdentityModel, которая доступна в виде пакета NuGet. Затем в методе Application_Start файла Global.asax добавьте:

void Application_Start(object sender, EventArgs e) 
{ 
    Thinktecture.IdentityModel.Http.Cors.IIS.UrlBasedCorsConfiguration.Configuration
        .ForResources("*")
        .ForOrigins("http://localhost:80, http://mydomain")
        .AllowAll()
        .AllowMethods("GET", "POST");
}

Теперь добавьте элемент httpProtocol в system.webServer:

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type, Accept, X-Requested-With, X-File-Name" />
    <add name="Access-Control-Allow-Methods" value="GET, POST" />
  </customHeaders>
</httpProtocol>

Мой звонок в $ .ajax теперь:

$.ajax({
    url: serviceUrl, 
    data: JSON.stringify(postData),
    type: "POST",
    cache: false,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: onSuccess,
    error: onError
});
6 голосов
/ 11 сентября 2015

Пробовали ли вы включить Доступ к источникам данных между доменами enter image description here

5 голосов
/ 11 января 2010

Я не верю, что вы можете сделать это прямо в Internet Explorer. У вас есть несколько вариантов:

  • Настройте скрипт пересылки прокси на сервере, которым вы управляете, который может пересылать запросы Ajax. Убедитесь, что он пересылается только в нужные вам пункты назначения, чтобы вас не превратили в анонимный ретранслятор.

  • Используйте трюк document.domain. По сути, вам нужно создать набор iframe с, по одному для каждого сервера, на который вам нужно делать вызовы Ajax. В каждом iframe установите свойство document.domain, чтобы точно соответствовать домену, который вам нужен для отправки запросов Ajax на . Что касается того, как заполнить необходимые данные, используйте манипуляцию DOM до установки document.domain. Обратите внимание, что этот прием требует, чтобы целевые серверы находились в поддоменах оригинала. Подробнее в этой статье , с примерами.

3 голосов
/ 04 июня 2012

У меня IE8 и 9 работают только с jQuery $ .ajax (jQuery версия 1.7.2)

jQuery.support.cors = true;
jQuery(function() {
$.ajax({
    crossDomain : true,
    dataType: 'html',
    //...
    });
});
1 голос
/ 05 апреля 2010

Для Internet Explorer 8 вам нужно сделать то же самое для FF3, т.е. использовать заголовок «Access-Control-Allow-Origin» плюс использовать объект XDomainRequest вместо XMLHttpRequest. Здесь все подробно объясняется для IE8: http://msdn.microsoft.com/en-us/library/dd573303%28VS.85%29.aspx

Более старые версии IE не поддерживают ни Cross Site Access Control, ни объекты XDomainRequest. Однако это еще не все, вы можете, например, прибегнуть к трюку IFrame, то есть создать невидимый IFrame, который вызывает ваши функции, как описано здесь: http://softwareas.com/cross-domain-communication-with-iframes

0 голосов
/ 02 августа 2010

Просто добавив к ответу Эрика, для более старой версии IE вы можете использовать метод $ .ajax Jquery 1.4.2, который по умолчанию разрешает междоменные запросы, или для междоменного JSON вы можете использовать

jQuery.getJSON (URL-адрес строки, данные карты, обратный вызов функции) возвращает XMLHttpRequest

Выдержка из документации Jquery.

"jQuery теперь поддерживает JSONP изначально - если вы попытаетесь загрузить JSON (через $ .getJSON или $ .ajax) с удаленного URL-адреса, для сервера будет предоставлен дополнительный обратный вызов."

...