2012-08-28 40 views

回答

5

是的。它应该发送一个实体或重定向!

(对不起,旧的编程笑话有时会出来)。

这实际上取决于你是否可以有意义地给GET一些东西,这是有道理的。

例如:我买了一些东西,我得到一个页面,上面写着“谢谢你,yadda yadda订单号,收据,yadda”。

这应该是一个303请参阅其他重定向,以便我获取带有该信息的页面。我可以将其加入书签供以后使用,刷新只是刷新GET。快乐的时光。

虽然有些时候,只有立即响应,如果它们刷新,然后重复实际操作,并且书签没有意义,这应该不是重定向。

大多数情况下,目标是尽可能减少后者。如果你必须将它们返回到表单,因为失败 - 没有人想要一个失败表单的书签,他们想要修复需要修复的东西,并且继续使用它。

请注意,许多服务器端系统(ASP等)在从POST重定向时使用302,这严格意味着它会再次POST,但几乎没有浏览器。取而代之的,是清晰的:

  1. 如果您想再次重定向POST,所以POST去不同的URI - 也没有,有其他问题 - 但如果你真的真的要的话307
  2. 如果你想用GET来跟踪一个POST来解释结果,那么它就是303.它毫不含糊地表示“现在做一个GET”。
+0

很棒的细节和一般的好信息。 –

4

是的,redirect after POST是避免这种情况的良好习惯。

+0

如果用户单击浏览器上的返回按钮,将发生重复表单提交。 – towry