Введение
Модель веб-разработки для предотвращения дублирования отправки формы Post/Redirect/Get (PRG) - это модель веб-разработки, которая позволяет перезагружать страницу, показанную после отправки формы, делиться или помечать ее в закладки без вредных последствий, таких как отправка формы в другой раз. Когда веб-форма отправляется на сервер через HTTP POST запрос, попытки обновления ответа сервера может привести к повторному отправке содержимого оригинального POST, что может привести к нежелательным результатам, таким как дублирование покупки в Интернете. Некоторые браузеры снижают этот риск, предупреждая пользователя, что они собираются повторно выпустить запрос POST. Чтобы избежать этой проблемы, многие веб-разработчики используют PRG-паттерн: вместо того, чтобы отвечать контентом, сервер отвечает на запрос POST, перенаправляя клиента в другое местоположение. Спецификация HTTP 1.1 ввела код ответа HTTP 303 ("Смотрите другие"), чтобы в этой ситуации браузеры могли безопасно обновлять ответ сервера, не заставляя повторно отправлять первоначальный запрос POST. При использовании PRG не удается решить все проблемы, связанные с дублированием форм. Например, если веб-пользователь обновляет до завершения первоначальной отправки, возможно, из-за задержки сервера, в некоторых пользовательских агентах возникает дублированный POST.
Post/Redirect/Get (PRG) is a web development design pattern that lets the page shown after a form submission be reloaded, shared, or bookmarked without ill effects, such as submitting the form another time. When a web form is submitted to a server through an HTTP POST request, attempts to refresh the server response can cause the contents of the original POST to be resubmitted, possibly causing undesired results, such as a duplicate web purchase. Some browsers mitigate this risk by warning the user that they are about to re issue a POST request. To avoid this problem, many web developers use the PRG pattern—instead of responding with content, the server responds to a POST request by redirecting the client to another location. The HTTP 1.1 specification introduced the HTTP 303 ("See other") response code to ensure that in this situation, browsers can safely refresh the server response without causing the initial POST request to be resubmitted. The PRG pattern cannot address every scenario of duplicate form submission. For example, if a web user refreshes before the initial submission completes, possibly because of server lag, a duplicate POST occurs in certain user agents.
Закладки
Пользовательские агенты (например, браузеры) хранят только URL HTTP-запроса в качестве закладки. Из-за этого ответ, основанный на теле запроса HTTP POST, не может быть помечен в закладки. С помощью шаблона PRG URI запроса может быть безопасно помечен в закладки.