假设我在 /page?id=1 上。
然后我导航到 /page?id=2。
我对那个页面进行了更改,这实现了一个post并重定向回 /page?id=2。
在Firefox中,我可以点击一次返回按钮返回到 /page?id=1,但是在iPhone上的Chrome和Safari中,我需要点击两次返回按钮,因为/page?id=2在浏览器历史记录中出现了两次。(如果我从id=2进行了多次发帖,我就必须点击相应次数的返回按钮才能最终返回id=1。)
从某些方面来说,这似乎是正常的浏览器行为,因为每个GET都被简单地推入历史记录中,但由于URL与先前条目相同,这导致了糟糕的用户体验,其他Web应用程序通常会避免这种情况...而且在Firefox中自然也会避免。
这是Webkit浏览器中不可避免的错误,还是我可以以不同的方式实现PRG来避免这种情况?
顺便提一下- 行为似乎在使用302或303重定向时相同。
更新: 我模拟了一些示例代码...不知道是否有像jsfiddle这样的平台,可以将其上传供您查看:
form.php:
id=<?=$_REQUEST['id']?>
<form action="submit.php" method="post">
<input type="hidden" name="id" value="<?=$_REQUEST['id']?>">
<input type="submit" value="submit">
</form>
提交.php:
<?php
header("Location: form.php?id=" . $_REQUEST['id']);
die($_REQUEST['id']);
?>
如果我从form.php?id=4(只是为了将其放入浏览器历史记录)开始,然后转到form.php?id=5,然后点击提交(就像执行数据库更改一样),在Firefox中,我会为每个页面得到一个历史记录条目;而在Chrome中,我会得到id=4的一个条目,然后是id=5的两个条目。为什么行为不同?我认为Firefox的行为更好,因为连续点击两次返回键离开id=5对用户来说是反直觉的。