Понимание "опубликовать/перенаправить/получить" [закрыто]
Мне очень трудно понять точный процесс "опубликовать/перенаправить/получить". Я прочесывал этот сайт и Интернет в течение нескольких часов и не могу найти ничего, кроме "вот концепция". Это так просто, что не требует пошагового руководства? Кто-нибудь знает хороший веб-сайт или книгу, которую я мог бы использовать, чтобы найти пример или учебник?
3 answers
Как вы, возможно, знаете из вашего исследования, POST
- перенаправление-GET
выглядит так:
- Клиент получает страницу с формой.
- Форма
POST
отправляется на сервер. - Сервер выполняет действие, а затем перенаправляет на другую страницу.
- Клиент следует за перенаправлением.
Например, предположим, что у нас есть такая структура веб-сайта:
-
/posts
(показывает список сообщений и ссылку на "добавить сообщение")-
/<id>
(просмотр определенного поста) -
/create
(при запросе с помощью методаGET
возвращает отправку формы самой себе; если это запросPOST
, создает публикацию и перенаправляет на конечную точку/<id>
)
-
/posts
само по себе это не имеет отношения к данному конкретному шаблону, поэтому я опущу его.
/posts/<id>
может быть реализовано следующим образом:
- Найдите запись с этим идентификатором в базе данных.
- Визуализируйте шаблон с содержимым этого сообщение.
/posts/create
может быть реализовано следующим образом:
- Если запрос является запросом
GET
:- Показать пустую форму, в которой цель установлена сама по себе, а метод установлен в
POST
.
- Показать пустую форму, в которой цель установлена сама по себе, а метод установлен в
- Если запрос является запросом
POST
:- Проверьте поля.
- Если есть недопустимые поля, снова покажите форму с указанными ошибками.
- В противном случае, если все поля действительны:
- Добавьте сообщение в база данных.
- Перенаправление на
/posts/<id>
(где<id>
возвращается из вызова базы данных)
Я попробую объяснить это. Может быть, другая точка зрения поможет вам.
С помощью PRG браузер в конечном итоге делает два запроса. Первый запрос является почтовым запросом и обычно используется для изменения данных. Сервер отвечает заголовком местоположения в ответе и без HTML-кода в теле. Это приводит к перенаправлению браузера на новый URL-адрес. Затем браузер отправляет запрос GET на новый URL-адрес, который отвечает содержимым HTML, отображаемым браузером.
Я постараюсь чтобы объяснить, почему следует использовать PRG. Метод GET никогда не должен изменять данные. Когда пользователь нажимает на ссылку, браузер или прокси-сервер могут возвращать кэшированный ответ и не отправлять запрос на сервер; это означает, что данные не были изменены, когда вы хотели, чтобы они были изменены. Кроме того, запрос POST не следует использовать для возврата данных, потому что, если пользователь хочет просто получить свежую копию данных, он вынужден повторно выполнить запрос, который заставит сервер снова изменить данные. Вот почему браузер выдаст вам это расплывчатое диалоговое окно с вопросом, уверены ли вы, что хотите повторно отправить запрос и, возможно, изменить данные во второй раз или отправить электронное письмо во второй раз.
PRG - это комбинация POST и GET, которая использует каждый из них для того, для чего они предназначены.