Ich habe die nächste Problemumgehung gefunden. Sie können die Umleitung nach der Verarbeitung der POST
Anforderung durch Bearbeiten des history
Objekts umgehen.
Sie haben also das HTML-Formular:
<form method=POST action='/process.php'>
<input type=submit value=OK>
</form>
Wenn Sie dieses Formular auf Ihrem Server verarbeiten, leiten Sie den Benutzer nicht weiter, /the/result/page
indem Sie den Location
Header wie folgt einrichten:
$cat process.php
<?php
process POST data here
...
header('Location: /the/result/page');
exit();
?>
Nach der Verarbeitung der POST
Daten rendern Sie klein <script>
und das Ergebnis/the/result/page
<?php
process POST data here
render the <script> // see below
render `/the/result/page` // OK
?>
Das <script>
solltest du rendern:
<script>
window.onload = function() {
history.replaceState("", "", "/the/result/page");
}
</script>
Das Ergebnis ist:
Wie Sie sehen können, werden die Formulardaten POST
in ein process.php
Skript umgewandelt.
Dieses Skript verarbeitet POST
Daten und rendert /the/result/page
sofort mit:
- keine Umleitung
- Keine erneuten
POST
Daten beim Aktualisieren der Seite (F5)
- Nein,
POST
wenn Sie durch den Browserverlauf zur vorherigen / nächsten Seite navigieren
UPD
Als eine andere Lösung bitte ich Feature - Anfrage die Mozilla FireFox Team Benutzer einrichten , damit NextPage
Header, wie funktioniertLocation
Header und Makepost/redirect/get
veraltet Muster.
Zusamenfassend. Wenn der Server Formulardaten POST
erfolgreich verarbeitet, gilt Folgendes:
- Setup-
NextPage
Header anstelle vonLocation
POST
Rendern Sie das Ergebnis der Verarbeitung von Formulardaten so, wie es für die GET
Anforderung im post/redirect/get
Muster gerendert würde
Der Browser wiederum, wenn der NextPage
Header angezeigt wird :
window.location
Mit NextPage
Wert einstellen
- Wenn der Benutzer die Seite aktualisiert, handelt der Browser eine
GET
Anfrage aus, NextPage
anstatt POST
Daten neu zu formulieren
Ich denke, das wäre exzellent, wenn es implementiert würde, nicht wahr? =)