「Post + Same Page Redirect + Get」メソッドを実装するフォームを送信すると、Chrome は 1 つだけではなく 2 つの履歴エントリを追跡します。
この奇妙な動作を示す手順。
1 - フォーム ページ ネイキッド フォーム ページ : demo.html を参照します。裸のフォームページ:
2 - フォームに入力します。記入済みフォーム:
3 - フォームを送信します。送信された - したがって空 - フォーム (PRG ベースの redirect-to-same-page.php からリダイレクトされた demo.html):
4 - ブラウザの「戻る」ボタンを 1 回クリックします。
Chrome は入力済みのフォームに戻ります (ステップ)。
5 - ブラウザの「戻る」ボタンをもう一度クリックして、そのフォーム ページに移動する前に閲覧していたページにアクセスする必要があります (たとえば、ブラウザの「Google」デフォルト ページ)。
これは、Chrome (バージョン 25.0.1364.172) および Safari (6.0.2) で発生します。
私が期待していること
フォームの前にページに到達するために、ブラウザの「戻る」クリックが1回あることを期待しています。これは、Firefox (19.0.2)、Opera (12.11)、および IE (バージョン 6 から最新の 10 まで) が実際にどのように動作するかです。
私のソースコード
demo.html
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<form action="redirect-to-same-page.php" method="post">
Type something and submit: <input type="text" name="something" /> <!-- optional: autocomplete="off" -->
<input type="submit" value="submit" />
</form>
</body>
</html>
同じページへのリダイレクト.php
<?php
header('Location: demo.html', true, 302); // not any of true/false 302/303 combinations are working
// not working either: header("Refresh: 0; demo.html");
exit;
?>
Chrome の Web インスペクタが明らかにすること...
1 提出前:
2 提出後:
私の質問
同様の質問と潜在的な回答を読みましたが、どれも私の問題を解決しませんでした。
この動作は Chrome/Safari の問題ですか、それとも機能*ですか? (* 送信が失敗した場合、入力したフォームの完全なバックアップが保持されます)
この動作を回避するための node.js または php の正しいまたはより防御的なコードはありますか?
ご協力いただきありがとうございます