2013-09-04 3 views
1

내 웹 사이트의 다른 페이지에 정보를 게시하려고 할 때 "Origin http://localhost:7230이 Access에서 발견되지 않습니다."라는 IE에 문제가 있습니다 (Chrome은 잘 작동합니다) -Control-Allow-Origin 헤더 ". 나는 이것이 CORS와 어떤 식 으로든 관련이 있다는 것을 이해하지만, 나는 나의 영역 밖에는 가지 않을 것이다. 요청을 보냅니다IE XdomainRequest CORS 문제

페이지는 다음과 같습니다 http://localhost:7230/TestPage.aspx

내가 페이지에 게시 http://localhost:7230/ActionHandler.aspx

코드에 게시하려고 페이지 :

function RequestData() 
    { 
     //If we have no data don't request anything, just reset the timer 
     if (dataStore.topReadings.length == 0 && dataStore.specifiedRanges.length == 0 && dataStore.entireRanges.length == 0 && dataStore.periodRanges.length == 0) 
     { 
     setInterval(RequestData, options.interval); 
     } 

     var params = "?Action=GET_DATA"; 
     var body = GetRequestXML(); 

     var xmlhttp; 

     if (window.XDomainRequest) // code for IE8 and IE9 
     { 
     xmlhttp = new XDomainRequest(); 
     if (xmlhttp) 
     { 
      xmlhttp.onerror = function() 
      { 
       alert("[Data Config]Failed to send request for configuration!\n" + xmlhttp.responseText); 
      }; 
      xmlhttp.ontimeout = function() 
      { 
       alert('xdr ontimeout'); 
      }; 
      xmlhttp.onprogress = function() 
      { 
      }; 
      xmlhttp.onload = function() 
      { 
       if (xmlhttp.responseText) 
       { 
        HandleResponseData($($.parseXML(xmlhttp.responseText))); 
       } 
      }; 

     } else 
     { 
      alert('failed to create xdr'); 
     } 
     } 
     else 
     { 
     if (window.XMLHttpRequest) // code for IE7, Firefox, Chrome, Opera, Safari 
     { 
      try 
      { 
       xmlhttp = new XMLHttpRequest(); 
      } 
      catch (e) 
      { 
       alert("[Data Request]Failed to create XMLHTTPRequest!\n" + e.message); 
      } 
     } 
     else  // code for IE6, IE5 
     { 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 

     xmlhttp.onreadystatechange = function() 
     { 
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 
      { 
       //alert("Handled!"); 
       HandleResponseData($($.parseXML(xmlhttp.responseText))); 
       that.trigger("dataReceived"); 
      } 
     } 
     } 

     try 
     { 
     xmlhttp.timeout = options.timeout; 
     xmlhttp.open("POST", "http://localhost:7230/ActionHandler.aspx" + params, true); 
     } 
     catch (e) 
     { 
     alert("[Data Request]Failed to open XMLHTTPRequest!\n" + e.message); 
     } 

     setTimeout(function() { xmlhttp.send(body); }, 0); 
    } 

이는 ASP입니다. Visual Studio에서 실행되는 NET 웹 사이트. 난 here 단계를 수행하고 web.config 파일에 관련 행을 추가했습니다. ActionHandler 페이지를 통해 내 요청을받는 방법에 대한 도움을 주시면 감사하겠습니다.

+0

Fiddler 또는 F12의 Network 탭을 사용하여 네트워크 트래픽을 보았을 때 POST가 전송되고 응답에'Access-Control-Allow-Origin' 헤더가 있습니까? – EricLaw

+0

XDomainRequest를 사용하면 교차 도메인으로 이동하지 않는 것이 좋습니다. 해당 개체는 사용자가 InPrivate 모드에서 실행중인 경우 IE8에서 완전히 실패하는 등 몇 가지 버그가 있습니다. 결국 크로스 도메인으로 이동해야하는 경우 여기의 코드는 IE10의 CORS-XHR보다 XDomainRequest를 선호합니다. 아마 안된다. – EricLaw

+0

정보 주셔서 감사합니다 Eric. 응답에는'Access-Control-Allow-Origin' 헤더가 있습니다. 나는 좌절감을 느끼고'$ .ajax()'호출을 시도했는데 그것은 작동한다. 내 문제는 XDR을 사용하여 제안한 것임을 알 수 있습니다. –

답변

1

일반적으로 한 도메인에서 다른 도메인으로 게시하거나 동일한 도메인에서도 http 소스에서 https 엔드 포인트로 게시하는 경우이 메시지가 표시됩니다.

이 헤더를 설정해 보셨습니까? 분명히 *를 사용

Access-Control-Allow-Origin", "*" 

조금 너무 광범위 당신은 축소하지만이 문제가 해결되는지 확인하는 것이 좋습니다.

+0

그건 의미가 있지만, 다른 도메인에 게시하지 않고 다른 프로토콜을 통해 게시하고 있다는 것을 알고있는 한 이해할 수 있습니다. 나는 그것을 설정했다고 확신한다. 내 질문의 마지막 줄을 읽었을 때 필자는 그 머리글을 추가하는 방법을 설명하는 안내서를 따라 갔지만 도움이되지 않았다. –

+0

FWIW, XDR을 사용하여 http-> https 또는 그 반대로 이동하려고하면 오류 메시지없이 즉시 IE가 실패합니다. http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx – EricLaw