복붙노트

[JQUERY] CORS 반환에 IE9 jQuery를 AJAX는 "액세스가 거부되었습니다"

JQUERY

CORS 반환에 IE9 jQuery를 AJAX는 "액세스가 거부되었습니다"

해결법


  1. 1.이것은 jQuery로 알려진 버그입니다. JQuery와 팀은 "핵심에서이 기능을 지원 할 계획을하고 더 나은 플러그인으로 적합하다."이 없습니다 (이 댓글을 참조하십시오). IE는 XMLHttpRequest를하지만, XDomainRequest라는 이름의 다른 개체를 사용하지 않습니다.

    이것은 jQuery로 알려진 버그입니다. JQuery와 팀은 "핵심에서이 기능을 지원 할 계획을하고 더 나은 플러그인으로 적합하다."이 없습니다 (이 댓글을 참조하십시오). IE는 XMLHttpRequest를하지만, XDomainRequest라는 이름의 다른 개체를 사용하지 않습니다.

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

    편집하다 함수 $ .ajaxTransport는 수송 공장을 등록합니다. 운송기는 요청을 수행하기 위해 $ 아약스에 의해 내부적으로 사용됩니다. 따라서, 당신이 평소와 같이 $ 아약스를 호출 할 수 있어야합니다 가정합니다. 운송 및 확장 $의 아약스에 대한 정보는 여기에서 찾을 수 있습니다.

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

    다른 두 노트 :

    HTTP HTTPS 문제 : 편집 2

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


  2. 2.@dennisg에 의해 허용 대답을 구축, 나는 MoonScript하여 성공적으로 사용 jQuery.XDomainRequest.js을 달성.

    @dennisg에 의해 허용 대답을 구축, 나는 MoonScript하여 성공적으로 사용 jQuery.XDomainRequest.js을 달성.

    다음 코드는 크롬, 파이어 폭스와 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]);
                }
            }
        });
    };
    

  3. 3.은 "jQuery를-ajaxTransport-XDomainRequest"플러그인을 사용하여이 작업을 수행하는 방법에 대한 지침은 여기에서 찾을 수 있습니다 : https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest#instructions

    은 "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


  4. 4.문제는 아래 IE9와는 CORS를 지원하지 않는다는 것입니다. http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds : XDomainRequest는 GET / POST 여기에 설명 된대로 텍스트 / 일반 conten 형 지원합니까 .ASPX

    문제는 아래 IE9와는 CORS를 지원하지 않는다는 것입니다. http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds : XDomainRequest는 GET / POST 여기에 설명 된대로 텍스트 / 일반 conten 형 지원합니까 .ASPX

    모든 HTTP 동사를 사용할 경우에 따라서 및 / 또는 JSON 등 다른 솔루션을 사용합니다. 나는 정상적으로 IE9 이하를 사용하는 경우 프록시로 다운 그레이드하는 프록시를 작성했습니다. 당신은 당신이 ASP.NET을 사용하는 경우 모두에서 코드를 변경할 필요가 없습니다.

    해결책은 두 부분이다. 첫 번째 JQuery와 AJAX 처리에 후크 JQuery와 스크립트이다. 도메인 간 요청이 브라우저가 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/


  5. 5.그것은 우리의 지원되는 브라우저 (IE7 +와 단골)의 모든 유일한 해결책 이었기 때문에 난 그냥 JSONP 모든 요청을했다. 올바른 답을 그래서 당신은, 당신의 대답은 기술적으로 IE9 작동 마음.

    그것은 우리의 지원되는 브라우저 (IE7 +와 단골)의 모든 유일한 해결책 이었기 때문에 난 그냥 JSONP 모든 요청을했다. 올바른 답을 그래서 당신은, 당신의 대답은 기술적으로 IE9 작동 마음.


  6. 6.MoonScript으로 솔루션을 구축, 대신이 시도 할 수 :

    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 또는 3.0와 함께 사용하여 성공을 거두었습니다


  7. 7.인터넷에서 익스플로러 8 이상 버전을 jQuery로 크로스 도메인 JSON을 얻기

    인터넷에서 익스플로러 8 이상 버전을 jQuery로 크로스 도메인 JSON을 얻기

    매우 유용한 링크 :

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

    X 도메인 요청에서 JSON을 반환하는 문제에 도움이 될 수 있습니다.

    이 사람을 도움이되기를 바랍니다.


  8. 8.당신이라는 아약스 파일에 일부 포함은 .js이있는 경우도 확인이 문제를 해결하려면 내 ajax.php에서 shadowbox.js을 포함하는 동안 액세스 거부 오류받은

    당신이라는 아약스 파일에 일부 포함은 .js이있는 경우도 확인이 문제를 해결하려면 내 ajax.php에서 shadowbox.js을 포함하는 동안 액세스 거부 오류받은


  9. 9.나는 내 dev에 기계에 CORS 웹 서비스를 테스트하고 만 IE에서 "액세스가 거부되었습니다"오류 메시지가 표시되었다. 파이어 폭스와 크롬은 벌금을했다. 그것은이가 아약스 호출에서 로컬 호스트의 내 사용으로 인해 발생 된 밝혀! 브라우저 그래서 URL이 뭔가를 같이했다 :

    나는 내 dev에 기계에 CORS 웹 서비스를 테스트하고 만 IE에서 "액세스가 거부되었습니다"오류 메시지가 표시되었다. 파이어 폭스와 크롬은 벌금을했다. 그것은이가 아약스 호출에서 로컬 호스트의 내 사용으로 인해 발생 된 밝혀! 브라우저 그래서 URL이 뭔가를 같이했다 :

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

    및 test.html를 내 아약스 호출 내부에 뭔가를 같이했다 :

    //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의 개발 도구 창에서 "네트워크"탭은 CORS 프리 플라이트 옵션은 내가 볼 것으로 예상 정확히 무엇 인 XMLHttpRequest를 GET, 다음에 요청할 보여줍니다.


  10. 10.2015 년 초 xDomain의 같은 업데이트가 제한된 별도의 코딩과 IE9에 대한 지원의 CORS에 널리 사용되는 라이브러리입니다.

    2015 년 초 xDomain의 같은 업데이트가 제한된 별도의 코딩과 IE9에 대한 지원의 CORS에 널리 사용되는 라이브러리입니다.

    https://github.com/jpillora/xdomain


  11. 11.사용하려고 JQuery와 - 운송 XDR jQuery를 플러그인 IE8 / 9 CORS 요청합니다.

    사용하려고 JQuery와 - 운송 XDR jQuery를 플러그인 IE8 / 9 CORS 요청합니다.


  12. 12.주 - 주

    주 - 주

    아약스에서 URL 또는 "IP >> 127.0.0.1": "http://www.domain.xxx"또는 "// 로컬 호스트 / HTTP"를 사용하지 마십시오. 단지 주소없이 경로 (디렉토리)와 페이지 이름을 사용합니다.

    거짓 상태 :

    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);
    
  13. from https://stackoverflow.com/questions/10232017/ie9-jquery-ajax-with-cors-returns-access-is-denied by cc-by-sa and MIT license