programing

IE9 jQuery AJAX with CORS에서 "Access is denied"를 반환합니다.

newstyles 2023. 8. 12. 10:05

IE9 jQuery AJAX with CORS에서 "Access is denied"를 반환합니다.

다음은 IE를 제외한 모든 브라우저에서 작동합니다(I'm testing in IE 9).

jQuery.support.cors = true;
...
        $.ajax(
            url + "messages/postMessageReadByPersonEmail",
            {
                crossDomain: true,
                data: {
                    messageId       : messageId,
                    personEmail     : personEmail
                },
                success: function() {
                    alert('marked as read');
                },
                error: function(a,b,c) {
                    alert('failed');
                },
                type: 'post'
            }
        );

는 저는다음사또용다있기습다니능이른는하을▁which▁▁uses다있습니를 사용하는 다른 기능이 있습니다.dataType: 'jsonp'하지만 이 AJAX 통화에 대한 어떠한 데이터도 필요하지 않습니다.저의 마지막 수단은 JSONP로 싼 지브리쉬를 돌려주는 것입니다.

IE가 데이터를 반환하지 않는 CORS 요청을 망치는 이유가 무엇입니까?

이것은 jQuery에서 알려진 버그입니다.jQuery 팀은 "핵심적으로 이를 지원할 계획이 없으며 플러그인으로 더 적합합니다."( 의견 참조)IE는 XMLHttpRequest사용하지 않고 XDomainRequest라는 대체 개체를 사용합니다.

jQuery에서는 이를 지원하는 플러그인을 사용할 수 있으며, 플러그인 https://github.com/jaubourg/ajaxHooks/blob/master/src/xdr.js 에서 찾을있습니다.

편집 기능$.ajaxTransport트랜스포터 공장을 등록합니다.트랜스포터는 내부적으로 사용됩니다.$.ajax요청을 수행합니다.그러므로, 저는 당신이 전화를 할 수 있어야 한다고 생각합니다.$.ajax평소처럼.운송수단 및 연장에 대한 정보$.ajax여기서 찾을 수 있습니다.

또한 이 플러그인의 더 나은 버전은 여기에서 찾을 수 있습니다.

다른 두 가지 참고 사항:

  1. XDomainRequest 개체는 IE8에서 도입되었으며 아래 버전에서는 작동하지 않습니다.
  2. IE10부터는 일반 XMLHttpRequest를 사용하여 CORS가 지원됩니다.

편집 2: http to https 문제

요청은 호스팅 페이지와 동일한 구성표를 대상으로 해야 합니다.

이 제한은 AJAX 페이지가 http://example.com 에 있는 경우 대상 URL도 HTTP로 시작해야 함을 의미합니다.마찬가지로 AJAX 페이지가 https://example.com 에 있는 경우 대상 URL도 HTTPS로 시작해야 합니다.

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

@dennisg의 수락된 답변을 바탕으로 jQuery를 사용하여 성공적으로 완료했습니다.MoonScript의 XDomainRequest.js.

다음 코드는 Chrome, Firefox 및 IE10에서는 올바르게 작동했지만 IE9에서는 실패했습니다.스크립트를 간단히 포함시켰더니 이제 IE9에서 자동으로 작동합니다. (그리고 아마도 8개일 것입니다. 하지만 테스트해 본 적은 없습니다.)

var displayTweets = function () {
    $.ajax({
        cache: false,
        type: 'GET',
        crossDomain: true,
        url: Site.config().apiRoot + '/Api/GetTwitterFeed',
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        success: function (data) {
            for (var tweet in data) {
                displayTweet(data[tweet]);
            }
        }
    });
};

"jQuery-ajaxTransport-XDomainRequest" 플러그인을 사용하는 방법에 대한 전체 지침은 https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest#instructions 에서 확인할 수 있습니다.

이 플러그인은 적극적으로 지원되며 HTML, JSON 및 XML을 처리합니다. 파일은 CDNJS에서도 호스팅되므로 추가 설정 없이 페이지에 스크립트를 직접 드롭할 수 있습니다. http://cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.1/jquery.xdomainrequest.min.js

CORS를 입니다. 와 IE9 버전의 CORS. 는 GET/POST만 지원합니다.text/plain여기에 설명된 내용 유형: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

따라서 모든 HTTP 동사 및/또는 json 등을 사용하려면 다른 솔루션을 사용해야 합니다.IE9 이하를 사용하면 프록시로 우아하게 다운그레이드되는 프록시를 작성했습니다.ASP를 사용하고 있다면 코드를 변경할 필요가 전혀 없습니다.그물.

해결책은 두 부분으로 나뉩니다.첫 번째는 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-Url http 헤더에서 값을 가져와 HTTP 요청을 수행한 후 최종적으로 결과를 반환해야 합니다.

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

JSONP가 지원되는 모든 브라우저(IE7+ 및 일반 브라우저)를 위한 유일한 솔루션이었기 때문에 모든 요청을 했습니다.명심하세요, 당신의 대답은 기술적으로 IE9에서 작동하므로 당신은 정답을 가지고 있습니다.

MoonScript의 솔루션을 기반으로 다음과 같은 방법을 사용할 수 있습니다.

https://github.com/intuit/xhr-xdr-adapter/blob/master/src/xhr-xdr-adapter.js

이점은 낮은 수준의 솔루션이기 때문에 jQuery뿐만 아니라 다른 프레임워크를 사용하여 IE 8/9에서 (가능한 범위 내에서) CORS를 사용할 수 있다는 것입니다.저는 AngularJS와 jQuery 1.x, 2.x에서 성공적으로 사용했습니다.

Internet Explorer 8 이상 버전에서 jQuery를 사용하여 교차 도메인 JSON 가져오기

매우 유용한 링크:

http://graphicmaniacs.com/note/getting-a-cross-domain-json-with-jquery-in-internet-explorer-8-and-later/

X 도메인 요청에서 json을 반환하는 문제를 해결할 수 있습니다.

이것이 누군가에게 도움이 되기를 바랍니다.

이 문제를 해결하려면 다음과 같은 Ajax 파일에 포함된 .js가 있는지도 확인하십시오.ajax.php에 shadowbox.js를 포함하는 동안 액세스 거부 오류가 발생했습니다.

개발 기계에서 CORS 웹 서비스를 테스트하던 중 IE에서만 "Access is denied" 오류 메시지가 표시되었습니다.파이어폭스와 크롬은 잘 작동했습니다.이것은 제가 아약스 호출에서 localhost를 사용했기 때문에 발생한 것으로 밝혀졌습니다!그래서 제 브라우저 URL은 다음과 같습니다.

http://my_computer.my_domain.local/CORS_Service/test.html

그리고 test.dll의 내부에 있는 나의 에이잭스 전화는 다음과 같았습니다.

//fails in IE 
$.ajax({
  url: "http://localhost/CORS_Service/api/Controller",
  ...
});

아약스 호출을 localhost 대신 컴퓨터 IP를 사용하도록 변경하면 모든 것이 작동했습니다.

//Works in IE
$.ajax({
  url: "http://192.168.0.1/CORS_Service/api/Controller",
  ...
});

IE dev tools 창 "Network" 탭에는 CORS Preflight OPTIONS 요청 다음에 XMLHttpRequest GET이 표시되는데, 이는 바로 제가 기대했던 것입니다.

2015년 초 기준 업데이트.xDomain은 제한된 추가 코딩으로 IE9에서 CORS를 지원하기 위해 널리 사용되는 라이브러리입니다.

https://github.com/jpillora/xdomain

IE8/9에서 CORS 요청에 jquery-transport-xdr jQuery 플러그인을 사용해 보십시오.

참고 -- 참고

Ajax의 URL에는 "http://www.domain.xxx " 또는 "http://localhost/" 또는 "IP >> 127.0.0.1"을 사용하지 마십시오.주소 없이 경로(디렉토리)와 페이지 이름만 사용합니다.

거짓 상태:

var AJAXobj = createAjax();
AJAXobj.onreadystatechange = handlesAJAXcheck;
AJAXobj.open('POST', 'http://www.example.com/dir/getSecurityCode.php', true);
AJAXobj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
AJAXobj.send(pack);

참 상태:

var AJAXobj = createAjax();
AJAXobj.onreadystatechange = handlesAJAXcheck;
AJAXobj.open('POST', 'dir/getSecurityCode.php', true);   // <<--- note
AJAXobj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
AJAXobj.send(pack);

언급URL : https://stackoverflow.com/questions/10232017/ie9-jquery-ajax-with-cors-returns-access-is-denied