CORS с jQuery и XDomainRequest в IE8 / 9


обновление: я настоятельно рекомендую не инвестировать какое-либо время в XDomainRequest, потому что это ужасно плохая реализация со многими ограничениями. Это в основном работает только для запросов GET на серверы без ssl, поэтому вы можете также использовать jsonp или что-то еще.


Я использую CORS для вызова кросс-доменного API, однако Internet Explorer дает проблемы. CORS должен быть возможен в IE8 и IE9 через

3 62

3 ответа:

метод POST поддерживается, и чтобы сделать междоменный https:// запрос, ваша вызывающая страница также должна быть загружена по https. Это лучшая статья, которую я нашел, которая подробно объясняет эти и другие ограничения XDomainRequest:

http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

Я написал прокси, который будет изящно понижаться до проксирования, если используется IE9 или меньше. Вам не нужно менять свой код вообще, если вы используете ASP.NET.

решение состоит из двух частей. Первый-это скрипт jquery, который подключается к обработке jQuery ajax. Он автоматически вызовет веб-сервер, если запрос crossDomain сделан и браузер IE:

$.ajaxPrefilter(function (options, originalOptions, jqXhr) {
    if (!window.CorsProxyUrl) {
        window.CorsProxyUrl = '/corsproxy/';
    }
    // only proxy those requests
    // that are marked as crossDomain requests.
    if (!options.crossDomain) {
        return;
    }

    if (getIeVersion() && getIeVersion() < 10) {
        var url = options.url;
        options.beforeSend = function (request) {
            request.setRequestHeader("X-CorsProxy-Url", url);
        };
        options.url = window.CorsProxyUrl;
        options.crossDomain = false;
    }
});

на вашем веб-сервере вы должны получить запрос, получить значение от X-CorsProxy-Url HTTP-заголовок и выполните HTTP-запрос и, наконец, верните результат.

мой пост в блоге: http://blog.gauffin.org/2014/04/how-to-use-cors-requests-in-internet-explorer-9-and-below/

на CORS запросы в IE8 / 9 вы можете использовать плагин jQuery jquery-transport-xdr