POST без перенаправления / GET? - PullRequest
3 голосов
/ 17 декабря 2011

Мой коллега работал над предотвращением дублирования отправки форм (при успешной отправке мы получаем электронное письмо и создается запись в БД). Отправка не будет успешной, если в форме есть ошибки.

Я просматривал его код и заметил, что он использовал P / R / G только для успешной отправки. Отправка формы все равно будет дублироваться при обновлении / повторном посещении, если она не будет успешной. Я отметил это в своем обзоре, но он утверждал, что не видит преимущества перенаправления каждый раз, потому что неудачная отправка игнорируется. Я отметил, что если пользователь обновляет страницу или просматривает ее в истории, он все равно получит предупреждение «ПОДТВЕРЖДАЕТ ФОРМУ» в основных браузерах.

Достаточно ли причины для перенаправления после каждого POST? Есть ли это, есть ли какая-либо другая причина для перенаправления после POST, даже если представление идемпотентно (из-за ошибок в форме)? Есть ли причина, по которой вы должны не перенаправлять после отправки формы?

Ответы [ 2 ]

3 голосов
/ 31 января 2012

Основная причина заключается в том, что каждый современный браузер вызывает неприятное диалоговое окно, которое открывается, когда вы нажимаете кнопку «Назад» или «Перезагрузить» (а люди делают - часто, хотите вы того или нет) после операции POST, предупреждая Вы, что повторная отправка POST собирается иметь место. Я, конечно, понимаю, почему они решили сделать это, но это означает, что, как программисты, мы прилагаем все усилия, чтобы гарантировать, что пользователю никогда не придется видеть сообщение.

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

0 голосов
/ 17 декабря 2011

Нет причин для перенаправления после неудачного POST.Повторение этого не принесет никакого вреда и облегчит вашу жизнь, так как вам не нужно хранить все значения форм в сеансе для повторного заполнения формы.

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

...