39 votes

Empêcher le bouton Précédent d'afficher l'alerte de confirmation POST

J'ai une application qui fournit une longue liste de paramètres à une page web, donc je dois utiliser POST au lieu de GET. Le problème est que lorsque la page est affichée et l'utilisateur clique sur le bouton de Retour, Firefox affiche un message d'avertissement:

Pour afficher cette page, Firefox doit envoyer des informations qui permettront de répéter une action (telles que la recherche ou de la confirmation de commande) qui a été réalisée plus tôt.

Depuis l'application est construite de telle façon que le fait d'aller à l'Arrière est assez courant de l'opération, c'est vraiment gênant pour les utilisateurs finaux.

En gros, je voudrais faire de la manière dont cette page:

http://www.pikanya.net/testcache/

Entrez quelque chose, de le soumettre, et cliquez sur le bouton Retour. Pas d'avertissement, il va juste retour.

Une recherche sur google, j'ai trouvé que ce serait peut-être un bug dans Firefox 3, mais j'aimerais en quelque sorte obtenir ce comportement, même après le "réparer".

Je suppose que cela pourrait être faisable avec des en-têtes HTTP, mais qui exactement?

37voto

Ilya Birman Points 2996

Voir ma règle d'or de la programmation web ici:

http://stackoverflow.com/questions/638494/stop-data-inserting-into-a-database-twice/638506#638506

Il dit: "jamais, jamais, Jamais de réagir avec un corps à un POST de demande. Toujours faire le travail, et répondent alors avec un en-tête location: pour rediriger vers la page à jour, de sorte que les requêtes du navigateur avec GET"

Si le navigateur a jamais demandé de l'utilisateur à propos de re-POSTER, votre web app est cassé. L'utilisateur ne devrait jamais voir cette question.

28voto

Pete Kirkham Points 32484

Un chemin de ronde, c'est de rediriger le POST à une page qui redirige vers un GET - voir Post/Redirect/Obtenir sur wikipédia.

Dire que votre POST est 4K de données de formulaire. Sans doute votre serveur n'quelque chose avec les données plutôt que de simplement afficher une fois et de le jeter, telles que l'enregistrement dans une base de données. Continuer à le faire, ou si c'est un énorme formulaire de recherche créer une copie temporaire dans une base de données qui obtient purgés après quelques jours ou sur une LRU lorsqu'une limite d'espace est utilisé. Maintenant, créez une représentation des données qui peuvent être consultées à l'aide de GET. Si c'est temporaire, générer un ID et utiliser que l'URL; si elle est permanente d'un ensemble de données qu'il a probablement un ID ou quelque chose qui peut être utilisé pour l'URL. Dans le pire des cas, un algorithme de type url minuscule utilise pouvez réduire un gros URL à une beaucoup plus petite. Rediriger le POSTE pour OBTENIR la représentation des données.


Comme une note historique, cette technique est pratique établie en 1995.

3voto

Sparr Points 5796

Une façon d'éviter cet avertissement / comportement est de faire le POST via AJAX, puis d'envoyer l'utilisateur sur une autre page (ou non) séparément.

1voto

troelskn Points 51966

J'ai une application qui fournit une longue liste de paramètres à une page Web, je dois donc utiliser POST au lieu de GET. Le problème est que lorsque la page est affichée et que l'utilisateur clique sur le bouton Précédent, Firefox affiche un avertissement:

Votre raisonnement est faux. Si la demande est sans effets secondaires, il devrait s'agir de GET. Si cela a des effets secondaires, cela devrait être POST. Le choix ne doit pas être basé sur le nombre de paramètres à passer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X