2016-05-17 49 views
6

我正在运行Spring API服务器和Angular-cli服务器来提供我的静态内容。在生产中,我们将使用CDN,但是对于开发,前端服务器和后端服务器都在本地盒子上的不同端口上运行。 Spring服务器提供最初的html页面,然后JS,CSS和html的其余部分来自angular-cli/CDN。如何在运行angular-cli服务时指定'Access-Control-Allow-Origin'

问题是,当调用System.import()时,浏览器抱怨CORS: XMLHttpRequest无法加载http://localhost:4200/system-config.js。请求的资源上没有“Access-Control-Allow-Origin”标题。因此不允许访问原产地'http://localhost:8080'。 zone.js:323错误:错误:XHR错误加载http://localhost:4200/system-config.js(...)

如何配置angular-cli来设置'Access-Control-Allow-Origin'标头,以便浏览器不会呕吐。

+0

我正在考虑创建某种“代理”,以便在开发期间将请求发送到API服务器,但我也对一些不太臭的事情感兴趣...... –

回答

0

我实际上通过使用ember-cli-cors附加解决了这个问题。所有你需要做的就是使用ng命令安装它,如下所示: ng安装ember-cli-cors

+0

看起来,所有这些都是在package.json devDependencies中为“ember-cli-cors”安装npm包。在安装后如何提供服务?感觉就像我必须导入它或将其添加到system-config.ts? –

+5

指定的命令安装无效。有关可用选项,请参阅“帮助”。 – marcel

1

支持CORS的配置是在服务器内完成的,您需要更新您的Spring API以允许来自默认情况下托管在端口4200上的CLI应用程序的请求。

0

你可以添加一个proxy config。它会将请求“代理”到服务器的域。

-1

FWIW,

CORS已在角度CLI中启用。开箱即用,Access-Control-Allow-Origin标头设置为*。 不确定它何时发布,但肯定1.0.0和更高版本启用它。

与所有CORS问题一样,您的API服务器也需要配置为接受CORS。

0

我刚刚花了大约20个小时试图解决此问题并阅读大量帖子。快速回答是,修改服务器CORS处理并避免glassfish。以下代码适用于tom ee(可能是其他人),但不适用于glassfish。

@Provider 
public class NewCrossOriginResourceSharingFilter implements ContainerResponseFilter { 

@Override 
public void filter(ContainerRequestContext requestContext, ContainerResponseContext response) { 
    response.getHeaders().putSingle("Access-Control-Allow-Origin", "*"); 
    response.getHeaders().putSingle("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); 
    response.getHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type"); 
} 
} 

通过由线二等分的代码线I发现,添加了“接入控制允许集管”调用导致GlassFish中产生一个内部服务器错误(500)的异常。显然,这个例外已经存在了一年多了,并没有显示出修复的迹象。

我从来没有能够得到代理配置解决方案的工作。我会看到调试消息的

/api/path/users => http:localhost:8080/ 

看来,任何尾随的路径或查询参数由代理过滤器截断的影响。

我希望这节省了一堆时间。