2013-06-06 2 views
1
에 200 응답 실패

나는 다음과 같은 코드가 있습니다아약스 프리 플라이트는 옵션 파이어 폭스

  • URI를
  • readyState가 = 1, 상태 :를 호출 할 때 나는 다음과 같은 경고를 참조

    Util.xmlGet = function(uriend, callback) { 
        var xmlhttp; 
        var uri; 
        if (window.XMLHttpRequest) { 
         // code for modern browsers 
         xmlhttp=new XMLHttpRequest(); 
        } else {// code for dinosaurs 
         xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
        } 
        if(document.URL.startsWith("file://")) { 
         uri = "https://tomcat.realm:8443/worldmodel/worldmodel?"; 
        } else { 
         uri = "/worldmodel/worldmodel?" 
        } 
        alert(uri+uriend); 
        xmlhttp.onreadystatechange=function() { 
         alert("readystate="+xmlhttp.readyState+", status="+xmlhttp.status); 
         if (xmlhttp.readyState==4 && xmlhttp.status==0) { 
          alert("preflight OK"); 
         } 
         if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
          alert("calling back"); 
          callback(xmlhttp.responseXML); 
         } 
        } 
        xmlhttp.open("GET",uri+uriend,true); 
        xmlhttp.setRequestHeader("Content-type","text/xml;charset=UTF-8"); 
        xmlhttp.send();  
        }; 
    

    을 = 0

  • readyState가 = 2, 상태 = 0
  • readyState가 = 4, 상태 = 0
  • 프리 플라이트 OK

OPTIONS 요청은 브라우저에서 보내고 "200"응답을 받았습니다. 더 정확하게 다음을 onreadystatechange에서

https://tomcat.realm:8443/worldmodel/worldmodel?type=thing 
Request Method: 
OPTIONS 
Status Code: 
HTTP/1.1 200 OK 

Request Headers 
14:35:30.000 
User-Agent:Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0 
Origin:nullHost:tomcat.realm:8443 
Connection:keep-alive 
Access-Control-Request-Method:GET 
Access-Control-Request-Headers:content-type 
Accept-Language:hu,en-us;q=0.8,es;q=0.5,en;q=0.3 
Accept-Encoding:gzip, deflateAccept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 


Response Headers Δ5ms 
Server:Apache-Coyote/1.1 
Date:Thu, 06 Jun 2013 12:35:30 GMT 
Content-Length:0 
Allow:GET, HEAD, POST, TRACE, OPTIONS 

GET 요청이 전송되지 않습니다, 더 이상 상태. 로컬 파일 시스템에서 html 파일에 (이 파이어 폭스에 대한 도움/보고서 것입니다) 1.0 -

은 우분투 캐 노니 컬의 파이어 폭스 21.0 모질라 파이어 폭스에서 이루어졌다.

문제는 여기에 무엇입니까?

+0

파이어 폭스 어디서나 당신의 로컬 파일 시스템에있는 파일에서 XHR 요청을 방지하지 않습니다? 우선 보안상의 이유로 동일한 도메인 (로컬 파일 시스템)을 참조 할 수 없기 때문입니다. 동일한 출처 정책으로 인해 다른 도메인에 액세스 할 수 없기 때문에 두 번째입니다. forcecors 플러그인을 설치하고 view => toolbars => addon bar로 활성화하면 어떻게됩니까? 그런 다음 오른쪽 하단 모서리에있는 "cors"텍스트를 클릭하십시오. 이제 어디서나 xhr 요청을 할 수 있습니다. 더 많은 정보를 원하시면 위키피디아를 동일한 원산지 정책으로 확인하십시오. – HMR

+0

힌트를 주셔서 감사합니다. cors에 의해 추가 된 헤더는 웹 콘솔이 보는 것처럼 OPTIONS 응답에 표시되지만 다른 모든 증상은 동일합니다. –

+0

로컬 파일에서 활성화 된 forecors 플러그인을 사용하여 xhr 연결을 열 수 있습니다. JQuery와 (모든 지역)으로 파일을 오픈하고 콘솔에 다음 코드를 붙여 :'$ 아약스 ("http://www.google.com.hk"); 요청이 완료'와 나는의 반응을 볼 수 있었다 콘솔. forcecors가 활성화되어 있지 않으면 요청이 빨간색으로 바뀌고 응답이 표시되지 않습니다. 웹 서버가 올바른 cors 응답 헤더를 보내는 경우 강제 코드없이 작동해야합니다. – HMR

답변

0

파이어 폭스는 로컬 파일 시스템에있는 파일의 xhr 요청을 어디서나 방지하지 않습니까? 우선 보안상의 이유로 동일한 도메인 (로컬 파일 시스템)을 참조 할 수 없기 때문입니다. 동일한 출처 정책으로 인해 다른 도메인에 액세스 할 수 없기 때문에 두 번째입니다.