- Post/Redirect/Get
-
Post/Redirect/Get (PRG) - общий шаблон проектирования для веб-приложений, который обеспечивает защиту от повторной отправки данных веб-форм и интуитивно понятное поведение веб-приложений при использовании закладок в браузере и обновлении страниц.
После того, как пользователь отправит данные с веб-формы на сервер, сервер генерирует HTML-страницу в ответ. Для пользователя это обычная веб-страница, но поскольку она была сгенерирована в ответ на POST-запрос, то при обновлении страницы браузер может ещё раз отправить данные на сервер, тем самым обеспечив повторную отправку данных.
Для решения этой проблемы в веб-приложениях используют паттерн Post/Redirect/Get — вместо возврата непосредственно HTML-страницы после POST-запроса происходит редирект (используется код HTTP 303 (иногда 302) вместе с HTTP-заголовком ответа "Location"), инструктируя браузер о следующей загружаемой странице через HTTP GET-запрос. Страницу, полученную в результате данных действий можно поместить в закладки браузера и обновить, при этом повторная отправка данных на сервер не произойдет.
Источники
- Redirect After Post, Michael Jouravlev, August 2004
- Description of the pattern for J2EE, Michael Jouravlev, August 14, 2003
- GET after POST Adam Vandenberg
- Is the Portlet Programming Model Broken? Subbu Allamaraju
- How to avoid POSTDATA resend warning Anis uddin Ahmad
- ASP.NET MVC — RC1 — Паттерн Post-Redirect-Get Alex Nesterov
- Redirect After Post, Michael Jouravlev, August 2004
Wikimedia Foundation. 2010.