Should I stop redirecting after successful POST or PUT requests?
It seems common in the Rails community, at least, to respond to successful POST
, PUT
or DELETE
requests by redirecting instead of returning success. For instance, if I PUT
a legal change to my user profile, the idiomatic response would be a 302 Redirect
to the profile page.
Isn't this wrong? Shouldn't we be returning 200 OK
from the request? Or a 201 Created
, in the case of a POST
request? Either of those, in the HTTP/1.1 Status Definitions are allowed to (or requ开发者_开发百科ired to) include a response, anyway.
I guess I'm wondering, before I go and "fix" my application, whether there is there a darn good reason why the community has gone the way of redirects instead of successful responses.
I'll assume, your use of the PUT
verb notwithstanding, that you're talking about a web app that will be accessed primarily through the browser. In that case, the usual reason for following up a POST with a redirect is the post-redirect-get pattern, which avoids duplicate requests caused by a user refreshing or using the back and forward controls of their browser. It seems that in many instances this pattern is overloaded by redirecting not to a success page, but to the next most likely place the user would visit. I don't think either way you mention is necessarily wrong, but doing the redirect may be more user-friendly at the expense of not strictly adhering to the semantics of HTTP.
It's called the POST-Redirect-GET (PRG) pattern. This pattern will prevent clients from (accidently) re-executing non-idempotent requests when for example navigating forth and back in browser's history.
It's a good general web development practice which doesn't only apply on RoR. I'd just keep it as is.
In a perfect world, yes, probably. However HTTP clients and servers are a mess when it comes to standardization and don't always agree on proper protocol. Redirecting after a post helps avoid things like duplicate form submissions.
精彩评论