programing

XMLHttpRequest 액세스가 Angular로 거부됨10 미만의 IE 버전에서는 JS

procenter 2023. 2. 11. 17:13
반응형

XMLHttpRequest 액세스가 Angular로 거부됨10 미만의 IE 버전에서는 JS

10보다 이전 버전의 Microsoft IE 브라우저에서 응용 프로그램을 볼 때 콘솔에서 다음과 같은 이상한 오류가 나타납니다.

개발자 콘솔에서 찍은 콘솔 화면. 이 오류로 인해 보기가 해결되지 않습니다.

Angular에 앞서 다음 JavaScript 코드를 추가하여 콘솔을 취소해 보았습니다.JS lib:

console.log = function(){};
window.console = {log: function(){}};

그것은 차이를 만들지 않았다.IE 10에서도 다음과 같은 에러가 표시됩니다.

SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied.

아마 API에서 '/me'를 가져와 사용자가 인증되었는지 게스트인지 확인하려고 했을 것입니다.

기본적으로.서버가 2XX 또는 3XX 이외의 응답을 할 때마다 발생하는 성가신 콘솔 오류를 배제하는 것이 좋습니다.

업데이트: 이것은 다른 서브 도메인(CORS)을 통해 API에 액세스하는 것과 관련이 있는 것 같습니다.

Google Angular에서 경험 많은 ng-dev의 안내를 통해 달성할 수 있었던 솔루션JS 그룹은 이 xDomain 라이브러리입니다.

설정은 매우 간단합니다.API의 루트에 proxy.html 파일을 배치하고 허용된 오리진('master')의 regex/string을 지정하고 프런트엔드의 스크립트에 대한 참조를 한 후 프런트엔드 스크립트('master')에서 이 파일을 가리킵니다.

iframe에서 proxy.html 파일을 열고 다음 명령을 사용하여 CORS 리소스와 통신합니다.postMessage.

$http와 $리소스 모두 매우 효과적입니다.

또한 스크립트를 다음과 같은 모든 JavaScript 라이브러리 위에 배치하여 일반 브라우저의 정상적인 기능을 유지할 수 있습니다.

<!--[if lte IE 9]>
<script src="xdomain.js" slave="http://example.org/proxy.html"></script>
<![endif]-->

물론 당신의 문제는 CORS와 관련이 있습니다.IE10은 실제 XmlHttpRequest를 사용하지만 그 이전에는 사용하지 않았습니다.지금까지 이러한 문제를 해결하는 가장 쉬운 방법은 apache 또는 nginx를 사용하여 API를 프록시하는 것입니다.예를 들어, nginx를 사용하여 서버에서{}블록:

location /api {
   proxy_pass http://my.server.name:12345/v1;
   proxy_redirect off;
}

jQuery가 XDomainRequest와 CORS를 완전히 지원하지 않더라도 XDR을 얻으려면 플러그인을 추가해야 합니다.또한 XDR에는 CORS에 관한 몇 가지 심각한 제한이 있습니다.

저 같은 경우에는Response Headers억제되었다

Content-Type:application/json; charset=UTF-8

이는 IE9의 경우 응답에서 JSON 오브젝트를 적절하게 처리/파싱할 수 없기 때문에 문제가 됩니다.

전환Response Headers로.

Content-Type:text/plain; charset=UTF-8

또한 IE9에는 다음 모듈이 포함되어 있는지 확인합니다.https://stackoverflow.com/a/28905072/1202371

텍스트로 응답을 수신한 후 JSON 개체로 변환할 수 있습니다.

언급URL : https://stackoverflow.com/questions/18706208/xmlhttprequest-access-denied-with-angularjs-on-any-ie-version-below-10

반응형