成功发布POST或PUT请求后,我应该停止重定向吗?

时间:2010-06-12 17:30:09

标签: http

至少在Rails社区中,通过重定向而不是返回成功来响应成功的POSTPUTDELETE请求似乎很常见。例如,如果我PUT对我的用户个人资料进行了合法更改,则惯用回复将为个人资料页面的302 Redirect

这不是错的吗?我们不应该从请求中返回200 OK吗?如果是201 Created请求,还是POST?无论如何,HTTP/1.1 Status Definitions中的任何一个都被允许(或被要求)包含回复。

我想我想知道,在我去“修复”我的应用程序之前,是否存在 darn 这个社区已经采用重定向而不是成功响应的理由。< / p>

3 个答案:

答案 0 :(得分:4)

我会假设您使用PUT动词,尽管您正在谈论主要通过浏览器访问的网络应用程序。在这种情况下,使用重定向跟进POST的通常原因是post-redirect-get pattern,这可以避免用户刷新或使用浏览器的后退和前进控件导致的重复请求。似乎在许多情况下,通过重定向到成功页面而不是用户将访问的下一个最可能的位置来重载此模式。我不认为你提到的任何一种方式都是错误的,但做重定向可能更加用户友好,而不是严格遵守HTTP的语义。

答案 1 :(得分:2)

它被称为POST-Redirect-GET (PRG) pattern。此模式将阻止客户端(意外地)重新执行非幂等请求,例如在浏览器的历史记录中向前和向后导航。

这是一个很好的通用Web开发实践,它不仅适用于RoR。我只是保持原样。

答案 2 :(得分:0)

在完美的世界中,是的,可能。然而,在标准化方面,HTTP客户端和服务器是一团糟,并不总是在正确的协议上达成一致。在帖子后重定向有助于避免重复提交表单等内容。