Nach der Verarbeitung einer POST-Anfrage führe ich die Standard-Umleitung auf die gleiche Seite durch, damit der Benutzer beim erneuten Laden der Seite kein Dialogfeld "Formular erneut senden" (oder gleichwertig) erhält.Warum gibt Chrome eine "Formularwiederherstellung bestätigen" aus, auch wenn ich das PRG-Muster verwende?
Ich verwende einen 303 Antwortstatuscode.
Hier ist der Code:
header("HTTP/1.1 303 See Other");
header("Location: " . $_SERVER['REQUEST_URI']);
exit();
Dies als in Safari und FF erwartet funktioniert. Chrome öffnet den Dialog "Formular erneut senden".
In Chrome kann ich den Netzwerkinspektor verwenden, um zu sehen, dass die 303-Weiterleitung tatsächlich ausgegeben wird, und es gibt ein GET nach meinem ersten POST.
Aber wenn ich versuche, die Seite an diesem Punkt neu zu laden, bekomme ich die "Confirm Form Resubmission".
Wenn ich die URL durch Hinzufügen eines falschen Abfrageparam ändern, geschieht dies nicht. Das ist ...
header("HTTP/1.1 303 See Other");
header("Location: " . $_SERVER['REQUEST_URI'] . '?foo');
exit();
... funktioniert gut.
Versucht Chrome, zu clever zu sein und das Nachladen der gleichen Seite kurz zu machen? Oder ist das ein bekanntes Problem? Ich habe einige Zeit damit verbracht, mich umzusehen, aber abgesehen von einer Million Fällen von Leuten, die nur das PRG-Muster brauchen, nichts.
Chrome hat eine Menge sehr Kuriosumumleitung Handhabung. Vielleicht ist 307 (oder 302) eine bessere Wahl. – Oliver
Danke, aber 307 wiederholt die gleiche Anfrage, so dass es eine Umleitungsschleife verursacht. – Greg
Ich weiß nicht, warum das ein Problem sein sollte, aber Sie können immer 302 verwenden. – Oliver