2012-07-05 2 views
1

프로토 타입 Ajax 요청과 함께 CORS에 공통적 인 문제가 있습니다. 나는 약 2 시간 동안 인터넷 검색을했고, 여전히 문제를 해결할 수는 없다. 나는 다른 접근법을 시도했다. 아무것도 나를 도왔다. 내 코드에 orgin, Access-Control-Allow-Origin 등을 설정해야합니다. 나는 다음 사이트를 언급했지만 도움이되지 못했습니다. PrototypeJS를 사용한 교차 소스 리소스 공유

Cross Origin Resource Sharing with PrototypeJS

new Ajax.Request("http://localhost:4000/somefolder/some.xml", { 
    //new Ajax.Request(source, { 
     asynchronous: false, 
     method: 'get', 
     contentType: 'text/xml', 
     //requestHeaders: ('Access-Control-Allow-Origin', '*','Access-Control-Allow-Methods','GET','Access-Control-Max-Age','1000','Access-Control-Allow-Headers','*'), 
     //requestHeaders: (Access-Control-Allow-Origin, *,Access-Control-Allow-Methods,GET,Access-Control-Max-Age,1000,Access-Control-Allow-Headers,*), 
     //onCreate: function(request) { 
     // request.transport.setRequestHeader = Prototype.emptyFunction; 
    // }, 
    requestHeaders: {Access: '*/*'}, 
    onSuccess: function(result) { 
     alert(result.responseXML); 
    } 
}); 

그리고 나는 다음과 같은 응답을 받고 있어요

http://kourge.net/node/131

:

Response Headersview source 
Connection keep-alive 
Content-Length 0 
Content-Type text/html; charset=utf-8 
Date Thu, 05 Jul 2012 08:58:08 GMT 
X-Powered-By Express 
Request Headersview source 
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding gzip, deflate 
Accept-Language en-us,en;q=0.5 
Access-Control-Request-He... x-prototype-version,x-requested-with 
Access-Control-Request-Me... GET 
Connection keep-alive 
Host localhost:4000 
Origin http://localhost:8080 
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0 

은 내가 GET 요청으로 보내고 있지만, 그것은 OPTIONS 요청으로거야.


또한 응답으로 헤더를 추가했습니다. 아직 도움이 안돼.

app.configure('development', function() { 
    app.use(express.errorHandler({ 
     dumpExceptions :true, 
     showStack :true 
    })); 
    app.all('*', function(req, res, next) { 
     res.setHeader('Access-Control-Allow-Origin', 'http://localhost:4000, http://localhost:8000'); 
     res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE'); 
     res.setHeader('Access-Control-Allow-Headers', 'x-prototype-version,x-requested-with'); 
     res.setHeader('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'); 
     res.setHeader('Accept-Encoding', 'gzip, deflate'); 
     res.setHeader('Accept-Language', 'en-us,en;q=0.5'); 
     res.setHeader("X-Requested-With", "XMLHttpRequest"); 
     res.setHeader("Orgin", 'http://localhost:4000'); 
     next() 
    }); 
}); 

추가 된/반영 응답 :

Response Headersview source 

Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding gzip, deflate 
Accept-Language en-us,en;q=0.5 
Access-Control-Allow-Head... x-prototype-version,x-requested-with 
Access-Control-Allow-Meth... GET,POST,PUT,DELETE 
Access-Control-Allow-Orig... http://localhost:4000, http://localhost:8000 
Allow GET,POST,PUT,DELETE,TRACE,CONNECT,PROPFIND,PROPPATCH,MKCOL,COPY,MOVE,LOCK,UNLOCK,VERSION-CONTROL,REPORT,CHECKOUT,CHECKIN,UNCHECKOUT,MKWORKSPACE,UPDATE,LABEL,MERGE,BASELINE-CONTROL,MKACTIVITY,ORDERPATCH,ACL,SEARCH,PATCH,PURGE 
Connection keep-alive 
Content-Length 224 
Content-Type text/html; charset=utf-8 
Date Fri, 06 Jul 2012 06:20:51 GMT 
Orgin http://localhost:4000 
X-Powered-By Express 
X-Requested-With XMLHttpRequest 

Request Headersview source 

Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding gzip, deflate 
Accept-Language en-us,en;q=0.5 
Access-Control-Request-He... x-prototype-version,x-requested-with 
Access-Control-Request-Me... GET 
Connection keep-alive 
Host localhost:4000 
Origin http://localhost:8080 
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0 

다른 내가이 문제를 해결하기 위해 무엇을 할 수 있는가?

답변

1

Access-Control-Allow-Origin: *은 요청 헤더 (Ajax 요청)가 아닌 응답 헤더의 일부 여야합니다.

데이터를 요청한 서버가 도메인 간 스크립트의 사용 권한을 허가/거부합니다.

사용중인 서버 환경에 따라 Access-Control-Allow-Origin을 설정하는 방법을 살펴 보겠습니다.

+0

내 응용 프로그램 (요청/orgin 서버)이 8000 포트의 Tomcat에서 실행 중입니다. 위의 xml은 3000 포트에서 node + express (서버/호스트의 응답)에 의해 전달되는 정적 파일입니다. 고속 폴더 구조의 공용 폴더에서 정적 경로 즉 방금 전달 중입니다. – Jak

+0

Tomcat 서버 포트가 8080 – Jak

+0

입니다. 해결책을 찾았습니다. 프로토 타입 Ajax 호출을 jQuery Ajax 호출로 간단히 변경했다. "crossDomain : true"를 추가했습니다. – Jak