2017-01-22 11 views
1

Я пытаюсь сделать угловым2, так что я новичок. У меня есть tomcat 8 с уже работающим сервером Джерси, я все еще использую его с приложением Android без каких-либо проблем. Итак, когда я пытаюсь реализовать простой запрос POST на сервер с угловым2, он не работает из-за невозможности CORS. Я добавил заголовки разрешенных кросс-истоков в угловом запросе. Это код: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> 

Что не так? Я понял, что проблема заключается в политике безопасности браузера, но мне нужно просто выполнить простой тест приложения CRUD в localhost, а tomcat работает на localhost: 9000 и угловая операция, выполняемая на localhost: 3000.

ответ

1

Попробуйте отказаться от линии headers.append('Access-Control-Allow-Origin', '*');.

Заголовок Access-Control-Allow-Origin является заголовком ответа сервера. Если вы добавите его в запрос, это приведет к тому, что браузер отправит preflight OPTIONS request, точно так же, как вы видите.