在提交实现“发布 + 同一页面重定向 + 获取”方法的表单时,Chrome 会跟踪两个历史记录条目,而不仅仅是一个。
展示这种奇怪行为的步骤。
1 - 我浏览到表单页面 裸表单页面:demo.html。裸表单页面:
2 - 我填写表格。填写的表格:
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 是否有正确或更具防御性的代码来避免这种行为?
谢谢你的帮助