我在http://restservice.net
处有一个REST服务。我正在为骨干网中的这项服务实施客户端。客户端只是一个html文件(用于引导应用程序)和一堆js文件,包含我的backbonejs代码。我将这些文件托管在另一个网站http://client.net
上。
我的backbonejs代码正在调用http://restservice.net
但现在由于same origin policy
而被允许。我已经看过其他SO问题,谈论我如何只能与http://client.net
交谈。
我是否必须通过http://client.net
重定向每个请求。我认为效率低下。那么使用客户端MVC框架有什么意义呢?我在这里错过了什么吗?
答案 0 :(得分:5)
您有两种选择:JSONP和CORS都要求您的http://restservice.net
服务器设置为支持协议。强制主干使用JSONP只需要将选项传递给Backbone.sync
。一种方法是这样的:
sync: function(method, model, options){
options.dataType = "jsonp";
return Backbone.sync(method, model, options);
}
JSONP的问题在于您只能发出GET请求,因此您的REST api实际上是只读的。要使CORS正常工作,您只需将api服务器配置为发回适当的标头。这很自由:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, PUT, DELETE OPTIONS
关于CORS的here is a pretty good run down。如果你设置它,那么事情将像往常一样工作。
如果您无法在http://restservice.net
对服务器进行更改,那么您别无选择,只能代理对该服务的所有请求。这绝对是低效的,但实施可能比你想象的要简单。需要考虑的一件事是reverse proxy