J'ai beaucoup de mal à comprendre le processus exact de "post/redirect/get".
J'ai parcouru ce site et le Web pendant plusieurs heures et je ne trouve rien d'autre que "voici le concept".
Comment comprendre le modèle post/redirect/get?
Comme vous le savez peut-être d'après votre recherche , POST
- redirect -GET
ressemble à ceci:
POST
s au serveur.Par exemple, disons que nous avons cette structure du site Web:
/posts
(affiche une liste de publications et un lien pour "ajouter une publication") /<id>
(afficher un message particulier)/create
(si demandé avec la méthode GET
, renvoie une publication de formulaire à lui-même; s'il s'agit d'une demande POST
, crée la publication et redirige vers la /<id>
point final)/posts
lui-même n'est pas vraiment pertinent pour ce modèle particulier, donc je vais le laisser de côté.
/posts/<id>
pourrait être implémenté comme ceci:
/posts/create
pourrait être implémenté comme ceci:
GET
: POST
.POST
: /posts/<id>
(où <id>
est renvoyé de l'appel à la base de données)Je vais essayer de l'expliquer. Peut-être que la perspective différente fait l'affaire pour vous.
Avec PRG, le navigateur finit par faire deux demandes. La première demande est une demande POST et est généralement utilisée pour modifier les données. Le serveur répond avec un en-tête Location dans la réponse et aucun code HTML dans le corps. Cela entraîne la redirection du navigateur vers un nouvelle URL. Le navigateur fait alors une demande GET à la nouvelle URL qui répond avec le contenu HTML que le navigateur rend.
Je vais essayer d'expliquer pourquoi PRG devrait être utilisé. La méthode GET n'est jamais censée modifier les données. Lorsqu'un utilisateur clique sur un lien, le navigateur ou le serveur proxy peut renvoyer une réponse mise en cache et ne pas envoyer la demande au serveur; cela signifie que les données n'ont pas été modifiées lorsque vous vouliez qu'elles soient modifiées. En outre, une demande POST ne doit pas être utilisée pour renvoyer des données, car si l'utilisateur souhaite simplement obtenir une nouvelle copie des données, il est obligé de réexécuter la demande, ce qui rendra la Le serveur modifie à nouveau les données. C'est pourquoi le navigateur vous donnera cette vague boîte de dialogue vous demandant si vous êtes sûr de vouloir renvoyer la demande et éventuellement modifier les données une deuxième fois ou envoyer un e-mail une deuxième fois.
PRG est une combinaison de POST et GET qui utilise chacun pour ce à quoi il est destiné.
C'est une question de concept, il n'y a pas grand-chose à comprendre:
Donc, conceptuellement, il n'y a aucun sens pour le serveur de répondre avec des données de ressource sur une demande POST, c'est pourquoi il y a une redirection vers la (généralement) même ressource qui a été créée/mise à jour Donc, si POST réussit, le serveur pense que le client voudrait récupérer les nouvelles données, l'informant ainsi de faire un GET dessus.