2011-12-17 2 views
3

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

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

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

+2

Я лично выдаю 303 после * каждого POST * из браузера, потому что я * никогда не хочу «подтвердить форму повторно отправить», когда-либо. Я сам справимся. Я считаю эту передовую практику, другие, вероятно, не согласятся, так что это не ответ. Один момент в этом, однако, заключается в том, что я обычно использую сеансы, которые упрощают передачу сообщений об ошибках и т. Д. В браузер, что не соответствует REST, поэтому это зависит от ваших требований. – DaveRandom

ответ

3

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

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

0

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

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

+0

Вы также можете просто не перенаправлять, пока вы делаете подачу своей формы, всегда терпите неудачу. –

+0

Затем вам понадобится код для визуализации формы в обоих местах. – ThiefMaster

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