2012-05-02 3 views
0

http://restservice.net에 REST 서비스가 있습니다. 백본에서이 서비스를위한 클라이언트를 구현하고 있습니다. 클라이언트는 단순히 html 파일 (응용 프로그램을 부트 스트랩하는 데 사용)과 backbonejs 코드가있는 js 파일입니다. 다른 사이트 http://client.net에서이 파일들을 호스팅하고 있습니다.Backbonejs - CORS 오류

내 백본 코드가 http://restservice.net으로 전화를 걸었으나 이제는 same origin policy으로 인해 허용됩니다. 나는 이미 http://client.net과 만 대화 할 수있는 다른 SO 질문에 대해 살펴 보았습니다.

http://client.net을 통해 모든 요청을 리디렉션해야합니까? 나는 그것이 비효율적이라고 생각한다. 그렇다면 클라이언트 측 MVC 프레임 워크를 사용할 때의 요점은 무엇입니까? 내가 여기서 뭔가를 놓치고 있니?

+0

'restservice.net'은 JSONP를 지원합니까? –

+0

내 서비스이므로 JSNOP을 지원하도록 할 수는 있지만 JSONP를 사용하여'Backbonejs '를 작동시키는 방법은 무엇입니까? – Suhas

답변

5

두 가지 옵션이 있습니다. JSONP와 CORS는 모두 http://restservice.net 서버가 프로토콜을 지원하도록 설정되어 있어야합니다. 백본에 JSONP를 사용하게하려면 단순히 옵션을 Backbone.sync으로 전달해야합니다. 이렇게하는 한 가지 방법은 다음과 같이이다 :

sync: function(method, model, options){ 
    options.dataType = "jsonp"; 
    return Backbone.sync(method, model, options); 
} 

JSONP의 문제가 REST API를 효과적으로 읽기 전용, 그래서 당신은 단지, GET 요청을 할 수 있다는 것입니다. CORS를 작동 시키려면 api 서버를 구성하여 적절한 헤더를 다시 보내면됩니다. 이 꽤 진보적 것 : CORS에

Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: POST, GET, PUT, DELETE OPTIONS 

here is a pretty good run down. 그걸 설정하면 일이 평소처럼 잘될 것입니다.

http://restservice.net에서 서버를 변경할 권한이없는 경우 해당 서비스에 대한 모든 요청을 프록시 할 수밖에 없습니다. 이것은 확실히 비효율적이지만 구현은 예상보다 간단합니다. 고려해야 할 한 가지는 다음과 같습니다. reverse proxy

+1

그냥'JSONP'를 지원하도록 추가하면 응답의 형식을 변경해야합니다. 더 이상 _pretty_ 및 _clean_ JSON 대신 _dirty_ javascript 함수 호출로 응답 할 수 없습니다. 나는 항상 그것이 가능한 CORS로 옮길 것입니다. – fguillen

관련 문제