处理 POST 请求后,我正在执行非常标准的重定向到同一页面的操作,以便用户在重新加载页面时不会收到“确认表单重新提交”(或等效)对话框。
我正在使用 303 响应状态代码。
这是代码:
header( "HTTP/1.1 303 See Other" );
header( "Location: " . $_SERVER['REQUEST_URI'] );
exit();
这在 Safari 和 FF 中按预期工作。Chrome 会弹出“确认表单重新提交”对话框。
在 Chrome 中,我可以使用网络检查器查看确实发出了 303 重定向,并且在我的初始 POST 之后有一个 GET。
但是,如果我当时尝试重新加载页面,我会收到“确认表单重新提交”。
如果我通过添加虚假查询参数来修改 URL,则不会发生这种情况。那是...
header( "HTTP/1.1 303 See Other" );
header( "Location: " . $_SERVER['REQUEST_URI'] . '?foo' );
exit();
...工作得很好。
Chrome 是否试图过于聪明并缩短同一页面的重新加载?或者这是一个已知问题?我花了一些时间环顾四周,但除了一百万只需要使用 PRG 模式的人之外,什么都没有。