Я должен прекратить перенаправлять после успешного POST или ПОМЕСТИТЬ запросы?

Кажется распространенным в сообществе направляющих, по крайней мере, ответить на успешный POST, PUT или DELETE запросы путем перенаправления вместо того, чтобы возвратить успех. Например, если я PUT легальное изменение в моем профиле пользователя, идиоматический ответ был бы a 302 Redirect к странице профиля.

Разве эта несправедливость не? Не были должны мы возвратиться 200 OK от запроса? Или a 201 Created, в случае a POST запрос? Или тех, в Определениях Состояния HTTP/1.1 позволяются (или требуются к), включают ответ, так или иначе.

Я предполагаю, что задаюсь вопросом, прежде чем я пойду и "исправлю" свое приложение, существует ли там проклятое серьезное основание, почему сообщество пошло путем перенаправлений вместо успешных ответов.

5
задан skaffman 12 June 2010 в 20:41
поделиться

3 ответа

Я предполагаю, несмотря на использование вами глагола PUT , что вы говорите о веб-приложении, доступ к которому будет осуществляться в основном через браузер. В этом случае обычной причиной для последующего выполнения POST-запроса с перенаправлением является шаблон post-redirect-get , который позволяет избежать дублирования запросов, вызванных обновлением пользователем или использованием элементов управления назад и вперед в своем браузере. Кажется, что во многих случаях этот шаблон перегружается из-за перенаправления не на страницу успеха, а на следующее наиболее вероятное место, которое пользователь посетит. Я не думаю, что любой из упомянутых вами способов обязательно неверен, но выполнение перенаправления может быть более удобным для пользователя за счет несоблюдения строго семантики HTTP.

4
ответ дан 14 December 2019 в 13:26
поделиться

Это называется шаблоном POST-Redirect-GET (PRG) . Этот шаблон предотвратит (случайно) повторное выполнение клиентами неидемпотентных запросов, например, при перемещении вперед и назад в истории браузера.

Это хорошая общая практика веб-разработки, которая применима не только к RoR. Я бы просто оставил это как есть.

2
ответ дан 14 December 2019 в 13:26
поделиться

В идеальном мире, да, наверное. Однако HTTP-клиенты и серверы создают беспорядок, когда дело доходит до стандартизации, и не всегда соглашаются с правильным протоколом. Перенаправление после публикации помогает избежать таких вещей, как дублирование отправки формы.

0
ответ дан 14 December 2019 в 13:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: