J'ai trouvé la prochaine solution de contournement. Vous pouvez échapper à la redirection après le traitement de la POST
demande en manipulant l' history
objet.
Vous avez donc le formulaire HTML:
<form method=POST action='/process.php'>
<input type=submit value=OK>
</form>
Lorsque vous traitez ce formulaire sur votre serveur, vous au lieu de rediriger l'utilisateur vers /the/result/page
en configurant l'en- Location
tête comme ceci:
$cat process.php
<?php
process POST data here
...
header('Location: /the/result/page');
exit();
?>
Après avoir traité les POST
données ed, vous rendez petit <script>
et le résultat/the/result/page
<?php
process POST data here
render the <script> // see below
render `/the/result/page` // OK
?>
Le <script>
vous devriez rendre:
<script>
window.onload = function() {
history.replaceState("", "", "/the/result/page");
}
</script>
Le résultat est:
comme vous pouvez le voir, les données du formulaire sont POST
éditées en process.php
script.
Ce script a traité les POST
données et le rendu /the/result/page
à la fois avec:
- pas de redirection
- pas de
POST
données lorsque vous actualisez la page (F5)
- non
POST
lorsque vous accédez à la page précédente / suivante dans l'historique du navigateur
UPD
Comme autre solution, je demande à l' équipe Mozilla FireFox de demander aux utilisateurs de configurer un en- NextPage
tête qui fonctionnera comme un en- Location
tête et rendra le post/redirect/get
modèle obsolète.
En bref. Lorsque le serveur traite POST
correctement les données du formulaire :
- En-
NextPage
tête de configuration au lieu deLocation
- Rendre le résultat du traitement des
POST
données du formulaire comme il le rendrait pour la GET
demande dans le post/redirect/get
modèle
Le navigateur à son tour quand voir l'en- NextPage
tête:
- Ajuster
window.location
avec NextPage
valeur
- Lorsque l'utilisateur actualise la page, le navigateur négocie la
GET
demande au NextPage
lieu de reformuler les POST
données
Je pense que ce serait excellent si mis en œuvre, n'est-ce pas? =)