我正在使用ember.js,它给我带来了这个错误:
XMLHttpRequest无法加载http://127.0.0.1:20000/accounts/0。响应 预检请求未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许来源“http://localhost:4200” 访问。
在我的服务器端,我已经放置了代码来打印出GET,POST和PUT调用的日志。它不打印任何东西。因此,我认为客户端从未向服务器发出任何请求。 (但是,手动访问“http://127.0.0.1:20000/accounts/0”确实会调用GET方法上的日志。)
服务器端已编码为返回Access-Control-Allow-Origin,它适用于其他方法。
那么,我的问题是什么?
只是为了记录,Java中的服务器端是:
responseBuilder.header("Access-Control-Allow-Origin", "http://localhost:4200");
responseBuilder.header("Access-Control-Allow-Headers", "origin, content-type, accept, authorization, auth-token");
responseBuilder.header("Access-Control-Allow-Credentials", "true");
responseBuilder.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
responseBuilder.allow("OPTIONS");
在我的ember.js config / environment.js中我有:
ENV['contentSecurityPolicy'] = {
'default-src': "*"
};
答案 0 :(得分:0)
解决:
private static void setAccessControlAllowOrigin(ServletContextHandler context) {
FilterHolder holder = new FilterHolder(CrossOriginFilter.class);
holder.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");
holder.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_ORIGIN_HEADER, "http://127.0.0.1:4200");
holder.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,POST,PUT,HEAD");
holder.setInitParameter(CrossOriginFilter.ALLOWED_HEADERS_PARAM, "X-Requested-With,Content-Type,Accept,Origin");
holder.setName("cross-origin");
FilterMapping fm = new FilterMapping();
fm.setFilterName("cross-origin");
fm.setPathSpec("*");
context.getServletHandler().addFilter(holder, fm);
}