3

「Post + Same Page Redirect + Get」メソッドを実装するフォームを送信すると、Chrome は 1 つだけではなく 2 つの履歴エントリを追跡します。

この奇妙な動作を示す手順。

1 - フォーム ページ ネイキッド フォーム ページ : demo.html を参照します。裸のフォームページ: ネイキッド フォーム ページ (demo.html)

2 - フォームに入力します。記入済みフォーム:

記入済みフォーム (demo.html)

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 の正しいまたはより防御的なコードはありますか?

ご協力いただきありがとうございます

4

0 に答える 0