为什么即使我使用PRG模式,Chrome也会发出"确认表单重新提交"?

Gre*_*reg 7 php google-chrome

在处理POST请求后,我正在做一个非常标准的重定向到同一页面的事情,这样如果用户重新加载页面,用户就不会得到"确认表单重新提交"(或等效)对话框.

我正在使用303响应状态代码.

这是代码:

header( "HTTP/1.1 303 See Other" );
header( "Location: " . $_SERVER['REQUEST_URI'] );
exit();
Run Code Online (Sandbox Code Playgroud)

这在Safari和FF中按预期工作.Chrome会弹出"确认表单重新提交"对话框.

在Chrome中,我可以使用网络检查器查看303重定向确实已发出,并且在我的初始POST后有一个GET.

然而,如果我在那时尝试重新加载页面,我会收到"确认表单重新提交".

如果我通过添加虚假查询参数来修改URL,则不会发生这种情况.那是...

header( "HTTP/1.1 303 See Other" );
header( "Location: " . $_SERVER['REQUEST_URI'] . '?foo' );
exit();
Run Code Online (Sandbox Code Playgroud)

......工作得很好.

Chrome是否试图过于聪明并且缩短同一页面的重新加载?或者这是一个已知的问题?我花了一些时间环顾四周,但除了一百万只需要使用PRG模式的人之外,没什么.

Oli*_*ver 10

这似乎是Chrome 25中的一个错误.我使用Chrome 24在虚拟框中测试了它并更新到Chrome 25.

Chrome 24 =>没有对话框

Chrome 25 =>对话框

也许你应该提交一个bug.:-)

  • 我提交了一个新的错误,因为我认为它们不相关https://code.google.com/p/chromium/issues/detail?id=177855 (2认同)