UFO ET IT

IE8 / 9에서 jQuery 및 XDomainRequest가있는 CORS

ufoet 2020. 11. 28. 13:19
반응형

IE8 / 9에서 jQuery 및 XDomainRequest가있는 CORS


업데이트 : 나는 XDomainRequest에 시간을 투자하지 않는 것이 좋습니다. 왜냐하면 그것은 많은 제한이있는 매우 형편없는 구현이기 때문입니다. 기본적으로 비 SSL 서버에 대한 GET 요청에만 실제로 작동하므로 jsonp 등을 사용하는 것이 좋습니다.


CORS를 사용하여 도메인 간 API를 호출하고 있지만 Internet Explorer에서 문제가 발생합니다. CORS는 XDomainRequest개체를 통해 IE8 및 IE9에서 가능해야 하지만 작업을 수행 할 수 없습니다 ..

JQuery 는 XDomainRequest에 대한 기본 지원 제공을 거부 하지만이 지원을 추가하려면 여러 jQuery 플러그인이 제안됩니다. 주제 에서는 작동하는 것으로보고 된 두 가지 플러그인 인 jQuery.XDomainRequest.jsxdr.js를 제안 합니다. Afaik, 플러그인은 자동으로 jQuery.ajax. 여기서 다른 플러그인을 찾았 습니다 .

CORS 지원 서버에 대한 ajax 요청을 수행 하는 각 플러그인 jQuery.XDomainRequestxdrjquery.ie.cors 로 약간의 데모 페이지를 배치했습니다 . 페이지는 Chrome 및 Firefox에서 작동하지만 IE8 / 9는 즉시 권한 거부 오류를 발생시킵니다 (요청하기 전에도). MSDN 게시물 은 다른 처리기를 추가하는 것이 xhr.onprogress = function() {};좋지만 이것을 시도했지만 작동하지 않습니다.

내가 뭘 잘못하고 있는지 단서가 있습니까? 나는 또한 MS 가상 서버를 사용하여 IE8로 테스트했지만 정확히 동일한 문제가 있습니다.

편집 : 좋아 그래서 나는 HTTPS를 통해 POST를 사용하고 있다는 문제가 있다는 것을 알았습니다. 분명히 XDomainRequest는 HTTPS를 통한 CORS를 허용하지 않습니다. HTTP로 전환 할 수 있지만 정말 POST가 필요합니다.

Edit2 : 이 이야기의 끝은 github에서이 문제를 참조하십시오 . HTTP POST를 사용할 때 xDomainRequest는 요청 본문 (인수)을 text/plain. 모두가 application/x-www-form-urlencoded또는 multipart/form-data.


POST 메서드가 지원되며 교차 도메인 https : // 요청을하려면 호출 페이지도 https를 통해로드되어야합니다. 이것은 XDomainRequest의 이러한 제한 사항과 기타 제한 사항을 자세히 설명하는 내가 찾은 최고의 기사입니다.

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


IE9 이하를 사용하는 경우 프록시로 정상적으로 다운 그레이드되는 프록시를 작성했습니다. ASP.NET을 사용하는 경우 코드를 전혀 변경할 필요가 없습니다.

해결책은 두 부분으로 나뉩니다. 첫 번째는 jQuery ajax 처리에 연결되는 jquery 스크립트입니다. 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-Urlhttp 헤더 에서 값을 가져 와서 HTTP 요청을 수행하고 마지막으로 결과를 반환해야합니다.

내 블로그 게시물 : http://blog.gauffin.org/2014/04/how-to-use-cors-requests-in-internet-explorer-9-and-below/


들어 CORS의 IE8에서 요청 / 9 당신은 jQuery를 플러그인을 사용할 수 있습니다 JQuery와 - 운송 XDR을

참고 URL : https://stackoverflow.com/questions/11487216/cors-with-jquery-and-xdomainrequest-in-ie8-9

반응형