POST请求是否应呈现HTML或重定向



POST请求应该呈现HTML还是重定向?

我讨厌你在页面上刷新并让浏览器告诉你,你将再次发布数据。

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

(对不起,以前的编程笑话有时不得不说出来)。

这真的取决于你是否能有意义地给予GET一些东西,这本身是有意义的。

示例:我买了一些东西,我收到一个页面,上面写着"谢谢,亚达亚达订单号,收据,亚达"。

这应该是一个303 See Other重定向,这样我就可以得到一个包含该信息的页面。我可以为它添加书签以备以后使用,刷新只是刷新GET。快乐的日子。

不过,有时,只有呈现即时响应才有意义,如果它们刷新,则重复实际操作,而书签则毫无意义。这不应该是重定向。

在大多数情况下,无论如何都要尽量少用后者。如果你因为某件事失败而不得不将它们返回到表单,这是最有用的——没有人想要一个失败表单的书签,他们想修复需要修复的东西并继续使用。

请注意,当您从POST重定向时,许多服务器端系统(ASP等)都会使用302,这严格意义上应该意味着它会再次POST,但几乎没有浏览器这样做。相反,要更清楚:

  1. 如果你想再次重定向POST,那么POST会转到另一个URI——好吧,不要,这还有其他问题——但如果你真的必须这样做,那么307
  2. 如果您想在POST之后使用GET来解释结果,那么303。它毫不含糊地意味着"现在做一个GET"

是的,最好在POST后重定向以避免这种情况。

最新更新