【发布时间】:2011-12-17 16:32:21
【问题描述】:
我的一位同事正在努力防止重复提交表单(成功提交后,我们会收到电子邮件并创建一个数据库条目)。如果表单有错误,则提交不成功。
我正在查看他的代码,我注意到他只在成功提交时使用了 P/R/G。如果表单提交不成功,刷新/重新访问时仍会重复提交表单。我在我的评论中注意到了这一点,但他认为他没有看到每次重定向的好处,因为不成功的提交被忽略了。我注意到如果用户刷新页面或在历史记录中重新访问它,他们仍然会在主要浏览器中收到“确认表单重新提交”警告。
这是否足以在每次 POST 后重定向?不管是否如此,即使提交是幂等的(由于表单中的错误),在 POST 之后是否还有其他原因要重定向?提交表单后是否有理由不重定向?
【问题讨论】:
-
我个人在浏览器的每一个 POST 之后都会发出 303,因为我从不想要“确认表单重新提交”。我会自己处理。我认为这是最佳实践,其他人可能会不同意,所以这不是答案。不过,关于这一点的一点是,我通常使用会话——这使得将错误消息等传递回浏览器更容易,这不符合 REST,所以这取决于你的要求。