3

在提交实现“发布 + 同一页面重定向 + 获取”方法的表单时,Chrome 会跟踪两个历史记录条目,而不仅仅是一个。

展示这种奇怪行为的步骤。

1 - 我浏览到表单页面 裸表单页面:demo.html。裸表单页面: 裸表单页面 (demo.html)

2 - 我填写表格。填写的表格:

填写的表格(demo.html)

3 - 我提交表格。提交 - 因此为空 - 表单(在 demo.html,从我的基于 PRG 的重定向到相同页面.php 重定向):

在此处输入图像描述

4 - 我单击浏览器的“返回”按钮一次。

Chrome 跳回填好的表单(步骤)

在此处输入图像描述

5 - 我需要再次单击浏览器的“返回”按钮才能到达我正在浏览的页面,然后才进入该表单页面(比如我的浏览器的“google”默认页面): 在此处输入图像描述

Chrome(版本 25.0.1364.172)和 Safari(6.0.2)会发生这种情况

我期待什么

我希望有一个浏览器的“后退”点击以到达表单之前的页面。这实际上是 Firefox (19.0.2) Opera (12.11) 和 IE(从版本 6 到最新 10)的行为方式。

我的源代码

演示.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>

重定向到相同的page.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 的网络检查器揭示了什么......

1 提交前: 在此处输入图像描述

2 提交后: 在此处输入图像描述

我的问题

我阅读了类似的问题和可能的答案,但没有一个能解决我的问题。

这种行为是 Chrome/Safari 问题还是功能*?(* 如果提交失败,它会保留您填写的表格的完整备份)

node.js 或 php 是否有正确或更具防御性的代码来避免这种行为?

谢谢你的帮助

4

0 回答 0