2016-09-23 2 views
0

У меня есть этот код:

клиент (angular2), размещенного на этом URL:

http://localhost:8080/Me/html/pages/gasolina/country/USA 

код:

return this.http 
      .post(this.supporToolSaveUrl, gasConfigModel, {headers: headers}) 
      .map(res => res.json()) 
      .subscribe(
      data => { 
       console.info("next: "); 
       console.info(data) 
      }, 
      err => console.error(err) 
     ); 

сервер (джерси Java)

, размещенного на этом URL:

http://localhost:8080/Me/services/countries 

код:

@Path("/SaveConfig") 
    @POST 
    @Consumes(MediaType.APPLICATION_JSON + ";charset=utf-8") 
    @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8") 
    public void saveConfig(CountryGasStationConfig countryGasStationConfig) throws Exception { 

я должен добавить их в Jersy аннотацию?

Когда я запустить его локально я получаю эту ошибку:

MLHttpRequest cannot load http://locahost:8080/.... Response for preflight is invalid (redirect) 

Я видел это post и этот пост

Как я могу сделать это решение в angular2?

приложение.

config(['$httpProvider', function ($httpProvider) { 
    //Reset headers to avoid OPTIONS request (aka preflight) 
    $httpProvider.defaults.headers.common = {}; 
    $httpProvider.defaults.headers.post = {}; 
    $httpProvider.defaults.headers.put = {}; 
    $httpProvider.defaults.headers.patch = {}; 
}]); 
+0

Почему бы вам просто не правильно обращаться с CORS на сервере, если вы управляете сервером, а не пытаетесь прибегнуть к какой-либо взломанной стороне клиента. –

+0

Я не хочу разрешать CROS для всех сайтов, как бы вы предложили решить эту проблему на стороне сервера? Клиент и сервер используют один и тот же домен, поэтому он должен был не выбросить ошибку CROS в любом случае –

ответ

0

Ваш Java-сервер имеет запросы CORS отключены. Изменение ваших запросов на стороне клиента не будет работать, потому что запросы OPTIONS автоматически создаются при запросе сервера на другой URL (даже если это просто другой порт на localhost). Невозможно обойти это.

Вместо этого вы должны включить CORS на свой Java-сервер. Here's a tutorial для java трикотажа, который также подробно рассказывает о том, что такое CORS.

+0

, но клиент и сервер имеют одинаковый URL-адрес, включая протокол HTTP и тот же порт. –

+0

Я отредактировал свой q, показывая, что клиент и сервер имеют одинаковый url. Кстати, если вы скажете, что исправление клиента не поможет - как получилось, что это принятый ответ в другом сообщении SF в моем теле вопроса? –

+0

Потому что это особенность AngularJS, разве вы не просите решение в Angular2? Возможно, ваш URL неверен, например, в http://stackoverflow.com/questions/38716357/angular2-response-for-preflight-is-invalid-redirect-from-some-get-requests –

Смежные вопросы