programing

Ajax 대상이 localhost인 경우 IE 10 및 11에서 액세스가 거부됨

muds 2023. 3. 27. 21:43
반응형

Ajax 대상이 localhost인 경우 IE 10 및 11에서 액세스가 거부됨

인터넷상의 서버(http)간에 Ajax 콜을 실행하려고 합니다.그리고 그걸 내 로컬 호스트에게 표적으로 삼는다.FF/Chrome/ETC... 작동한다.IE만의 문제입니다.IE 11 및 10을 사용하는 IM.

요청도 아직 안 끝났어요."접근 거부"는 즉시 느려집니다.

이게 암호야.네가 보기 위해서야.

IE8 및 IE9의 전형적인 HTTP/HTTPS 에러가 아닙니다.이것은 다른 것입니다만, 설명서는 도움이 되지 않습니다.

$jq.ajax({
            contentType: 'application/json',
            url: url,
            dataType: 'json',
            crossDomain: true,
            beforeSend: function (xhr) {
                xhr.withCredentials = true; 
                xhr.setRequestHeader("Authorization", "Basic " + $jq.base64.encode(username and password));
            },
            success: function (data, status, headers) {},
            error: function (xhr, status, error) {}

상태는 다음과 같습니다.0xhrobject 및 error는 "접근 거부"입니다.

Internet Explorer는 보안 영역 기능의 일부로 이 오류를 발생시킵니다.기본 보안 설정을 사용하여 "인터넷" 영역의 원본에서 "로컬 인트라넷" 영역의 리소스에 액세스하려고 하면 "액세스가 거부되었습니다" 오류가 발생합니다.

Ajax 코드를 수동으로 쓰는 경우 리소스를 열려고 하면 Internet Explorer에서 오류가 발생합니다.예를 들어 다음과 같습니다.

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://localhost/', true); // This line will trigger an error
xhr.send();

원본 사이트를 "신뢰할 수 있는 사이트" 보안 영역에 추가하여 이 오류를 방지할 수 있습니다.이를 테스트하려면 "신뢰할 수 있는 사이트" 존에 "http://client.cors-api.appspot.com"을 추가하고 이 테스트 페이지를 사용하여 localhost 사이트를 원격 URL로 지정합니다.

신뢰할 수 있는 사이트의 요건에 가세해, 테스트 사이트가 https 로 호스트 되고 있었지만, 행선지가 http(s 를 사용하지 않는 경우)로 실패하는 등, 요구에 대해서 같은 프로토콜을 사용할 때까지, 문제가 수정되지 않는 것을 알았습니다.

이는 IE에만 해당되며 Chrome은 디버깅콘솔에 경고를 정중하게 기록하기만 하면 장애가 발생하지 않습니다.

IE9에서 교차원 Ajax 요청을 작성하려면XDomainRequest대신XMLHttpRequestXDR을 랩하는 jQuery 플러그인이 있습니다.XDR에는 몇 가지 주목할 만한 제한이 있습니다.

또 다른 옵션은 다음과 같은 라이브러리를 사용하는 것입니다.https://github.com/jpillora/xdomain

jQuery는 를 사용하여 Ajax 콜을 구현합니다.XMLHttpRequestIE9에서는 지원되지 않는 오브젝트입니다.강제로 사용해야 합니다.XDomainRequest대신.

다음 jQuery 플러그인을 사용하면 이 문제를 해결할 수 있습니다.

https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest

주의:

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

false 상태:

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);



function createAjax()
{
    var ajaxHttp = null;
    try
    {
        if(typeof ActiveXObject == 'function')
            ajaxHttp = new ActiveXObject("Microsoft.XMLHTTP");
        else 
        if(window.XMLHttpRequest)
            ajaxHttp = new XMLHttpRequest();
    }
    catch(e)
    {
        alert(e.message);
        return null;
    }
    //-------------
    return ajaxHttp;
};

언급URL : https://stackoverflow.com/questions/22098259/access-denied-in-ie-10-and-11-when-ajax-target-is-localhost

반응형