2017-01-22 39 views
1

我試用angular2,所以我是新手。 我有一個tomcat 8與澤西服務器已經工作,我仍然使用它與android應用程序沒有任何問題。 因此,當我嘗試使用angular2實現一個簡單的POST請求到服務器時,由於CORS不允許而失敗。 我已經在角度請求中添加了allow-cross-origin頭。這是代碼:Angular2和tomcat 8:CORS自動發送OPTION請求而不是POST

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上運行localhost:9000和localhost:3000上運行的角色驗證的簡單測試。

回答

1

嘗試刪除headers.append('Access-Control-Allow-Origin', '*');一行。

Access-Control-Allow-Origin標頭是服務器響應標頭。如果您將其添加到請求中,則會導致瀏覽器發送一個preflight OPTIONS request,完全如您所見。