Неправильный запрос CORS для PUT с AngularJS - PullRequest
0 голосов
/ 04 марта 2019

В приложении Spring есть отображение, которое выглядит следующим образом:

@PutMapping(path="/test/{id}")
public @ResponseBody Shop putTest(@PathVariable("id") long id,
                                  @RequestBody User user {
....

При попытке вызвать эту конечную точку с помощью Angular, выполнив:

$http({
   method: 'PUT',
   url: 'https://localhost:8000/api/test',
   data: senddata,
   params:{'id':id},
   headers: {
     "Content-Type": "application/json; charset=utf-8"
   }
})

enter image description here

Что-то не так с моим запросом, если да, то как я могу это исправить?

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Это нормальное поведение, когда происхождение не определено правильно.

Посмотрите на настройку на стороне сервера.Браузеры отправляют запрос OPTIONS до вашего запроса PUT.

Подробнее о Access-Control-Request-* заголовках.

0 голосов
/ 04 марта 2019

Предположительно, ваше приложение Spring обслуживается через другой порт вашего углового приложения?Для браузера это считается другим источником, поэтому запросы не будут выполняться, если ответы сервера не содержат заголовок Access-Control-Allow-Origin.Вам нужно будет соответствующим образом настроить приложение Spring.

Это та же политика происхождения браузера, которая защищает пользователей от подделки межсайтовых запросов.Например, представьте, что злой вдохновитель создает, казалось бы, невинный веб-сайт evil.com, который запускает загрузку AJAX-запросов к различным банковским серверам в надежде, что вы вошли на один из них (т. Е. У вас есть файл cookie с истекшим сроком действия).Если на серверах банков не установлен заголовок управления доступом, разрешающий запросы из любого места (они не должны), запросы должны завершаться неудачей.Запрос GET действительно будет успешным, потому что браузер не знает, что не должен был отправлять его, пока не получит заголовки из ответа, но браузер остановит код JS, читающий ответ, так что все в порядке.Для «небезопасных» запросов, таких как POST, PUT и т. Д., Браузер сначала выполняет запрос перед полетом (используя метод OPTIONS), чтобы получить заголовки.Если домен, с которого загружена страница, не включен в список разрешенных источников, небезопасный запрос не выполняется.

0 голосов
/ 04 марта 2019

ваш бэкэнд должен знать, куда поступают запросы.просто для того, чтобы протестировать этот запрос, вы можете указать, где запрос может быть выполнен, просто добавьте эту аннотацию.

@CrossOrigin(origins = "http://localhost:9000")
@PutMapping(path="/test/{id}")
public @ResponseBody Shop putTest(@PathVariable("id") long id,
                                  @RequestBody User user {
....

я надеюсь, что это полезно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...