Введение

Модель веб-разработки для предотвращения дублирования отправки формы Post/Redirect/Get (PRG) - это модель веб-разработки, которая позволяет перезагружать страницу, показанную после отправки формы, делиться или помечать ее в закладки без вредных последствий, таких как отправка формы в другой раз. Когда веб-форма отправляется на сервер через HTTP POST запрос, попытки обновления ответа сервера может привести к повторному отправке содержимого оригинального POST, что может привести к нежелательным результатам, таким как дублирование покупки в Интернете. Некоторые браузеры снижают этот риск, предупреждая пользователя, что они собираются повторно выпустить запрос POST. Чтобы избежать этой проблемы, многие веб-разработчики используют PRG-паттерн: вместо того, чтобы отвечать контентом, сервер отвечает на запрос POST, перенаправляя клиента в другое местоположение. Спецификация HTTP 1.1 ввела код ответа HTTP 303 ("Смотрите другие"), чтобы в этой ситуации браузеры могли безопасно обновлять ответ сервера, не заставляя повторно отправлять первоначальный запрос POST. При использовании PRG не удается решить все проблемы, связанные с дублированием форм. Например, если веб-пользователь обновляет до завершения первоначальной отправки, возможно, из-за задержки сервера, в некоторых пользовательских агентах возникает дублированный POST.

Закладки

Пользовательские агенты (например, браузеры) хранят только URL HTTP-запроса в качестве закладки. Из-за этого ответ, основанный на теле запроса HTTP POST, не может быть помечен в закладки. С помощью шаблона PRG URI запроса может быть безопасно помечен в закладки.