我使用backbone,underscore,require .js和REST API开发项目。
我收到错误Cross-Origin Request Blocked The Same Origin Policy disallows reading the remote resource at...
注意:我已经在服务器端配置了Access-Control-Allow
。不过,错误仍然存在。
我找到了一个解决方案,使用ajaxPrefilter
,然后我在我的项目中尝试过:
router.js:
start: function() {
Backbone.history.start({pushState: true});
},
initialize: function() {
$.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
options.url = options.url;
});
}
这是我的主干观点:
var _wl = new MyModel();
_wl.save(_item,{
success: function(res) {
console.log(res);
}
});
我仍然有“跨源请求被阻止:同源策略禁止在http://example.com/api/MyWebs读取远程资源。这可以通过将资源移动到同一域或启用CORS来解决。
有谁能告诉我这里错了什么?
任何帮助和想法都将受到赞赏。
答案 0 :(得分:1)
您能否检查来自http://example.com/api/MyWebs的响应是否带有正确配置的CORS标头,例如" Access-Control-Allow-Origin" ""接入控制允许集管和#34;""接入控制允许的方法"等等。这可以通过在chrome / firefox中打开开发工具并检查响应头来完成。
如果CORS配置正确,可以采取以下措施:
响应标题:
服务器端:
EG:
if(containerRequestContext.getRequest().getMethod().equalsIgnoreCase("OPTIONS")) {
// code to check if the request is made from a allowed origin and if everything is fine abort with success / forbidden.
}
EG: 语言/框架:泽西框架,Java
每个响应都将通过以下过滤器,并将添加以下响应标头。
@PreMatching
@Provider
public class SecurityResponseFilter implements ContainerResponseFilter {
private static final Logger LOGGER = Logger.getLogger(SecurityResponseFilter.class);
@Override
public void filter(ContainerRequestContext containerRequestContext,ContainerResponseContext containerResponseContext) throws IOException {
try {
containerResponseContext.getHeaders().add("Access-Control-Allow-Origin", "*");
containerResponseContext.getHeaders().add("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE");
containerResponseContext.getHeaders().add( "Access-Control-Allow-Headers", "tk_a,tk_r" );
} catch (Exception e) {
LOGGER.error("Error occured while processing request.",e);
throw e;
}
}
}
$.ajaxPrefilter(function(options,originalOptions,jqXHR) {
jqXHR.setRequestHeader("tk_a",$.cookie("tk_a"));
jqXHR.setRequestHeader("tk_r",$.cookie("tk_r"));
});