Angular2和tomcat 8:CORS自动发送OPTION请求而不是POST

时间:2017-01-22 12:22:51

标签: angularjs tomcat jersey http-headers cors

我尝试使用angular2,所以我是新手。 我有一个tomcat 8与泽西服务器已经工作,我仍然使用它与Android应用程序没有任何问题。 因此,当我尝试使用angular2向服务器实现简单的POST请求时,由于不允许CORS,它会失败。 我在角度请求中添加了allow-cross-origins标头。这是代码:

 var creds = "email=" + email + "&password=" + password;
   let headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded'});
   headers.append('Access-Control-Allow-Origin', '*');
   let options = new RequestOptions({headers: headers});
   this.http.post("http://192.168.1.70:9000/api/login", creds, options)
        .map(res => res.json())
        .subscribe(
            data => this.saveJwt(data),
            err => this.logError(err),
            () => console.log('Authentication Complete')
        );

在服务器端,我在tomacat 8 web.xml文件中添加了过滤器。

 <filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
    <init-param>
        <param-name>cors.allowed.origins</param-name>
        <param-value>*</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.methods</param-name>
        <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

这有什么问题? 我知道问题是浏览器安全策略,但我只需要在localhost中对CRUD应用程序进行简单测试,tomcat在localhost:9000上运行,而角度apllication在localhost:3000上运行。

1 个答案:

答案 0 :(得分:1)

尝试删除headers.append('Access-Control-Allow-Origin', '*');行。

Access-Control-Allow-Origin标头是服务器响应标头。如果您将其添加到请求中,则会导致浏览器发送preflight OPTIONS request,就像您看到的那样。