Если он не видит эти заголовки в ответе на запрос OPTIONS, вы получите ошибку HTTP, читающую что-то вроде «Нет заголовка« Access-Control-Allow-Origin »на запрашиваемом ресурсе» и запрос POST не будет сделано.

от вопрос уже есть ответ здесь:

Проблема совместного использования ресурсов с исходным кодом, даже если присутствуют все заголовки CORS 2 ответа

Я хочу отправить данные формы angular 4 в сервлет Java, но не могу отправить, потому что не проходит контроль доступа. Я хочу вставить данные в БД с помощью сервлета Java

это мой код интерфейс: data.service.ts

 import { Injectable } from '@angular/core';
 import { Http, Response } from '@angular/http';
 import { Headers, RequestOptions, ResponseOptions } from '@angular/http';
 import { Observable } from 'rxjs';
 import 'rxjs/add/operator/map';
 import 'rxjs/add/operator/toPromise';

 @Injectable()
 export class DataService {

 result: any;
 private url = '//localhost:8080/my-java-web/';
 constructor(private _http: Http) { }


 addBookWithPromise(user: object): Promise<object> {
  const headers = new Headers({ 'Content-Type': 'application/json', 
  "Access-Control-Allow-Origin": "*",
  "Access-Control-Allow-Methods":" GET, POST, OPTIONS",
  "Access-Control-Allow-Headers": "Content-Type",
  "Access-Control-Allow-Credentials": "true"});
  const options = new ResponseOptions({ headers: headers });
  return this._http.post(this.url + 'loginsuccess', user, 
   options).toPromise()
  .then(this.extractData)
  .catch(this.handleErrorPromise);
  }

  private extractData(res: Response) {
  const body = res.json();
   return body.data || {};
   }
   private handleErrorObservable (error: Response | any) {
    console.error(error.message || error);
   return Observable.throw(error.message || error);
   }
   private handleErrorPromise (error: Response | any) {
   console.error(error.message || error);
   return Promise.reject(error.message || error);
   }

    }

бэкэнд: Java сервлет

public class LoginSuccess extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    response.addHeader("Access-Control-Allow-Origin","*");
    response.addHeader("Access-Control-Allow-Methods"," GET, POST, OPTIONS");
    response.addHeader("Access-Control-Allow-Headers","Content-Type");
    response.addHeader("Access-Control-Allow-Credentials", "true");
    PrintWriter out = response.getWriter();

    String username = request.getParameter("username");
    String password = request.getParameter("password");



    System.out.println("Success" +username);

Большое Вам спасибо

 sideshowbarker09 сент. 2017 г., 07:20
Внутренний код удаленного сервера, на который отправляется запрос, должен реализовывать поддержку запроса OPSS перед полетом CORS.developer.mozilla.org/en-US/docs/Web/HTTP/..., Простого добавления правильных заголовков ответа часто бывает недостаточно - вы также должны убедиться, что он отправляет правильный код ответа, 200 или 204. Чтобы получить дополнительную помощь, перейдите на панель «Сеть» вашего браузера devtools, перезагрузите и проверьте ответ. показанный там для опций перед отправкой браузера. В частности, проверьте код состояния HTTP для ответа.

Ответы на вопрос(1)

Решение Вопроса

Сообщение блога Некоторое время назад о реализации CORS. Он основан на использовании среды Spring (в частности Spring Boot), а не на Servlet API напрямую, но в нем довольно подробно объясняется, как работает CORS.

Ваша конкретная проблема заключается в том, что вы обрабатываете только POST. Протокол CORS подразумевает, что веб-браузер отправляет запрос OPTIONS на ваш сервер.

Именно этот запрос OPTIONS должен иметь Access-Control-Allow-Origin и связанные заголовки, возвращаемые в ответе.

Если браузер видит эти заголовки в ответе, он выполняет POST.

Если он не видит эти заголовки в ответе на запрос OPTIONS, вы получите ошибку HTTP, читающую что-то вроде «Нет заголовка« Access-Control-Allow-Origin »на запрашиваемом ресурсе» и запрос POST не будет сделано.

Ваш ответ на вопрос