none
ajax 사용시 IE9에서 status 12030, 12152 오류 발생 RRS feed

  • 질문

  • 안녕하세요. 나눔기술에 김홍수입니다.

    올해 4월 부터 ajax로 WAS와 통신시 응답이 늦게 오거나 없는 오류가 발생하는 현상이 발생되어 확인해 본 결과

    ajax를 통해 WAS와 통신시  간헐적으로 통신 오류 status 12030, 12152 가 발생되는

    현상이 있음을 확인하였습니다.  해당 현상을 인터넷에서 찾아본 결과 저희 제품에서만 나는 것이 아니라 여러

    개발자들이 해당 현상에 대해 아래 URL 처럼 인지를 하고 있는 것을 확인하였습니다.

    http://stackoverflow.com/questions/4796305/why-does-internet-explorer-not-send-http-post-body-on-ajax-call-after-failure

    http://hustoknow.blogspot.kr/2012/12/microsoft-internet-explorer-12152-errors.html

    현재 문제가 되는 IE 버전의 정보는 다음과 같으며,

    IE Major version : IE9(9.0.8112.16421IC)

    update version : KB3003057

    저희가 ajax를 사용하는 코드의 일부도 참고로 보내드립니다.

    제가 위에서 언급한 내용에 대한 문제가 MS 제품 (IE) 에 있었는지와 해결책이 있으면 답변 부탁 드립니다.

    사용 코드 형태

    try {
      if( g_xmlDom == null){
       if (window.XMLHttpRequest) {
        g_xmlDom = new XMLHttpRequest();
       } else if(window.ActiveXObject) {
        try{
         g_xmlDom = new ActiveXObject("Msxml2.XMLHTTP");
        }catch(e){
         g_xmlDom = new ActiveXObject("Microsoft.XMLHTTP");
        }
       } else {
        alert("사용중인 PC 에 정상적인 XML 파서가 설치 되어 있지 않습니다.");
       }
      }
      // 보내기 전에 백업데이터 저장
      this.urlToRetry = this.url;
      this.postDataToRetry = this.postData;
      var isSucess = false;
      try{
       g_xmlDom.open(this.actionMethod, this.url, false);
       isSucess = true;
      }catch(e){
       if (window.XMLHttpRequest) {
        g_xmlDom = new XMLHttpRequest();
       } else if(window.ActiveXObject) {
        try{
         g_xmlDom = new ActiveXObject("Msxml2.XMLHTTP");
        }catch(e){
         g_xmlDom = new ActiveXObject("Microsoft.XMLHTTP");
        }
       } else {
        alert("사용중인 PC 에 정상적인 XML 파서가 설치 되어 있지 않습니다.");
       }
       
      }
      
      if(!isSucess){
       g_xmlDom.open(this.actionMethod, this.url, false);
      }
      g_xmlDom.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      g_xmlDom.setRequestHeader("access-type", "AJAX");
     
      // 브라우저 타입 설정함 - 꼭 이렇게 안해도 뭔가 서블릿쪽에서 한글처리 관련한 부분이 있을것 같지만...급하니깐;
      var browserType = "";
      if(navigator.userAgent.indexOf('Gecko') > -1){
       browserType = "ff";
      } else{
       browserType = "ie";
      }
     
      g_xmlDom.setRequestHeader("browser-type", browserType);
      
      if( browserType == "ie" ) {
       // time out을 줘본다.
       if(this.timeout > 0) {
        g_xmlDom.timeout = this.timeout * 1000;
       } else {
        g_xmlDom.timeout = 0;
       }
       
       if(g_xmlDom != null) {
        g_xmlDom.ontimeout = this.OnTimeout;
        g_xmlDom.onerror = this.OnTimeout;
       }
      }
        
      g_xmlDom.send(this.postData);
     
      var status = g_xmlDom.status;
      var viewMSg  = "";
      viewMSg = "URL : " + this.url + "\n";
      viewMSg += "DATA : " + this.postData + "\n";
      viewMSg += "STATUS : " + status + "\n";
      viewMSg += "RESULT : " + g_xmlDom.responseText + "\n";

    2015년 5월 15일 금요일 오전 7:37

모든 응답

  • 해당 이슈는 포럼 기술지원 범위 밖입니다. 그렇지만 도음을 드리고자 내부 엔지니어에게 도움을 받아서 전달드립니다.

    참고하시고 더 정확한 사항은 기술지원을 받으시길 바랍니다.

    말씀하신 12030, 12152 오류는 WinInet 함수에 의해 반환되는 오류 코드입니다.

    정확한 해당 코드에 대한 오류 메시지는 다음과 같습니다.

    12030       ERROR_INTERNET_CONNECTION_ABORTED

                   The connection with the server has been terminated.

    12152       ERROR_HTTP_INVALID_SERVER_RESPONSE

                   The server response could not be parsed

    참고. WinInet 오류 코드 (12156-12001)

    https://support.microsoft.com/ko-kr/kb/193625

    12030 은 인터넷 연결이 종료(Aborted)된 상황을 의미하며 지속적으로 발생하는 건이 아니라면, 흔히 Network 상의 이슈를 의심해 볼 수 있습니다. Client Server간에 중간에 거쳐가는 장비들 사이에서 발생하는 Traffic Congestion 이나 기타 이슈들로 인해 이 증상은 발생할 수 있습니다.

    12152 역시 ‘서버의 응답이 잘못되었을 경우’ 나타날 수 있으며 흔히 응답 헤더를 해석(Parse)하지 못할 때 발생하곤 합니다. 응답 헤더를 해석하지 못한다는 것은 서버 자체에서 애초에 잘못 보냈을 경우도 있겠지만 그러한 경우는 흔치 않으며, 보통 네트워크 장비를 거쳐 오는 동안 중간에 유실되거나 패킷이 완전하게 전달되지 못했을 경우에 발생할 수 있습니다. 특히 12152 오류는 서버측(응답을 보내는 측)에서 문제가 있을 경우로 보시는 편이 좋습니다.

    즉 이러한 관점으로 볼 때 두 오류 코드에 의한 내용은 Client 측 웹 브라우저인 Internet Explorer의 이슈로 판단하고 접근하기에는 성급한 판단일 수 있습니다.

    이러한 이슈가 발생할 경우 WireShark Network Monitor와 같은 트래픽 캡처 도구를 이용하여 Client Server간에 발신/수신 된 시간 상의 차이나 유실된 패킷은 없는지 등을 확인해보는 것이 우선이라고 판단됩니다.

    또한 Internet Explorer 자체에 대해서 해당 코드에 대한 Bug는 없습니다.

    추가적으로 확인해 본다면, Web Server 측의 웹 로그를 분석하여 응답 시간은 적절하게 주고 있는지, Network 상의 문제로 보이는 로그는 보이지 않는지 등을 점검해 보는 것도 하나의 방법일 것입니다.

    참고로 어떠한 웹 서버를 이용하시는지 모르겠지만, IIS의 경우 웹로그의 win32-status 코드가 64가 빈번히 발생할 경우 네트워크 상의 문제를 의심해 볼 수 있습니다.

    [참고]

    System Error Codes (0-499)

    https://msdn.microsoft.com/en-us/library/ms681382.aspx

    ERROR_NETNAME_DELETED

    64 (0x40)

    The specified network name is no longer available.

                                

    제시해 드린 답변이 도움이 되었기를 바랍니다.
       
    답변이 문제 해결에 도움이 되었다면 답변으로 채택을 부탁드립니다.
    하지만 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해주시기 바랍니다

    2015년 5월 27일 수요일 오전 5:26
    중재자
  • 안녕하세요. 우선 답변은 감사 드립니다.

    위의 부분에 대해 인터넷 검색 중

    https://support.microsoft.com/ko-kr/kb/895954/en-us

    위와 같은 글을 발견했습니다. 위 글을 보면 XMLHttp 모듈이 Re-post 시 Header만

    전송되는 오류가 있다는 글 같은데 이 부분과 상관이 없는 건가요?

    이와 같이 header만 전송된다면 충분히 위와 같은 오류가 생길거라 예상됩니다.

    2015년 5월 28일 목요일 오후 12:58