Как перенаправить после успешного запроса на удаление

#rest #http #redirect #http-delete

#rest #http #перенаправление #http-удалить

Вопрос:

У меня есть HTML-форма, выполняющая запрос НА УДАЛЕНИЕ (метод = POST amp; hidden X-HTTP-Method-Override = DELETE)

Когда запрос на удаление выполнен успешно, как мне сообщить браузеру перенаправить на другую страницу? Допустимо ли расположение заголовка 303 ?

В настоящее время браузер не отображает пустой ответ, но сохраняет предыдущий ответ (я думаю, из-за кода состояния 204). Если я добавлю заголовок location (все еще код состояния 204), это не изменит местоположение.

С местоположением 303 у меня есть желаемое поведение, но мне интересно, является ли 303 допустимым кодом состояния после успешного УДАЛЕНИЯ. Как насчет 202 (принятого) УДАЛЕНИЯ?

Комментарии:

1. Это POST-запрос, а не запрос на УДАЛЕНИЕ.

2. @JulianReschke API на самом деле УДАЛЯЕТ запрос, но не во всех основных браузерах возможно выполнить запрос на удаление без javascript (это всего лишь <форма> на странице здесь). Итак, api ищет параметр формы X-HTTP-Method-Override, чтобы переопределить метод http

3. Ни один браузер не поддерживает УДАЛЕНИЕ в формах. Это не часть HTML. В любом случае: POST-запрос — это POST-запрос, независимо от того, сколько пользовательских заголовков вы к нему прикрепите.

4. @JulianReschke да, возможно, мне не следовало упоминать об этом в вопросе. Что я хочу знать, так это каков был правильный код состояния успешного УДАЛЕНИЯ. То, что я злоупотребил параметром формы, чтобы подделать метод http, не было связано

Ответ №1:

Расположение 303 plus — лучший выбор. Не беспокойтесь о том, что такое «успешное УДАЛЕНИЕ», потому что вы используете POST, который имеет другой набор семантики, а 303 специально разработан для перенаправления запросов POST:

10.3.4 303 Смотрите другие

Ответ на запрос может быть найден под другим URI и ДОЛЖЕН быть получен с помощью метода GET на этом ресурсе. Этот метод существует главным образом для того, чтобы разрешить вывод постактивированного скрипта для перенаправления пользовательского агента на выбранный ресурс. Новый URI не является заменяющей ссылкой для первоначально запрошенного ресурса. Ответ 303 НЕ ДОЛЖЕН быть кэширован, но ответ на второй (перенаправленный) запрос может быть кэшируемым.

Комментарии:

1. возможно, мне не следовало говорить, что я использую POST-запрос: я использую запрос POST a здесь только потому, что я не могу отправить запрос на удаление в HTML-форме (без javascript), другой клиент будет выполнять запрос на удаление. запрос POST X-HTTP-method-override=DELETE рассматривается контроллером как запрос на удаление. в любом случае, я думаю, что буду придерживаться 303 и отмечу ваш ответ как ответ, если никто не придумал лучшего решения 🙂

2. Я выбираю HTTP DELETE, и, возвращая правильный 204, который не зависит от REST, я передал URL перенаправления в заголовках