Подтвердить что ты не робот

Понимание шаблона "post/redirect/get"

Мне очень трудно понять точный процесс "post/redirect/get".

Я прочесывал этот сайт и сеть в течение нескольких часов и не могу найти ничего, кроме "здесь понятия".

Как понять шаблон сообщения/перенаправления/получения?

4b9b3361

Ответ 1

Как вам известно из , POST -redirect- GET выглядит следующим образом:

  • Клиент получает страницу с формой.
  • Форма POST для сервера.
  • Сервер выполняет действие, а затем перенаправляется на другую страницу.
  • Клиент следует перенаправлению.

Например, скажем, что у нас есть эта структура веб-сайта:

  • /posts (показывает список сообщений и ссылку на "добавить сообщение" )
    • /<id> (просмотреть конкретную запись)
    • /create (если запрашивается с помощью метода GET, возвращает отправление формы самому себе, если это запрос POST, создает сообщение и перенаправляет конечную точку /<id>)

/posts сам по себе не имеет отношения к этому конкретному шаблону, поэтому я его не буду.

/posts/<id> может быть реализована следующим образом:

  • Найти сообщение с этим идентификатором в базе данных.
  • Измените шаблон с содержимым этого сообщения.

/posts/create может быть реализован следующим образом:

  • Если запрос является запросом GET:
    • Показывать пустую форму с заданным целевым набором, а метод - POST.
  • Если запрос является запросом POST:
    • Подтвердите поля.
    • Если есть недопустимые поля, снова покажите форму с указанными ошибками.
    • В противном случае, если все поля действительны:
      • Добавить запись в базу данных.
      • Перенаправление на /posts/<id> (где <id> возвращается из вызова в базу данных)

Ответ 2

Wikipedia объясняет это так хорошо!

Проблема

The Problem

Решение

The Solution

Ответ 3

Я попробую объяснить это. Возможно, другая перспектива делает трюк для вас.

В PRG браузер заканчивает выполнение двух запросов. Первый запрос - это запрос POST и обычно используется для изменения данных. Сервер отвечает заголовком "Местоположение" в ответе и без HTML в теле. Это заставляет браузер перенаправляться на новый URL-адрес. Затем браузер делает запрос GET на новый URL-адрес, который отвечает содержимым HTML, которое отображает браузер.

Я попытаюсь объяснить, почему PRG следует использовать. Метод GET никогда не должен изменять данные. Когда пользователь нажимает ссылку, браузер или прокси-сервер могут возвращать кешированный ответ и не отправлять запрос на сервер; это означает, что данные не были изменены, если вы хотите, чтобы они были изменены. Кроме того, запрос POST не должен использоваться для возврата данных, поскольку, если пользователь хочет просто получить новую копию данных, они вынуждены повторно выполнить запрос, который заставит сервер снова изменить данные. Вот почему браузер предоставит вам этот неопределенный диалог с вопросом, хотите ли вы повторно отправить запрос и, возможно, изменить данные во второй раз или отправить электронное письмо во второй раз.

PRG - это комбинация POST и GET, которая использует каждый для того, для чего они предназначены для использования.