Benjamin Carlyle makes the case for deprecating post. In a follow-up post, Peter Williams points out the major reason (which is not immediately obvious if you read Ben’s piece without context):
POST’s lack of idempotence has some nasty side effects particularly for what is probably the most common use of POST today, new resource creation. Consider the following scenario, you POST a request to create a new resource but you don’t get a response. It is impossible to automatically recover from this scenario. You cannot resend the request because the new resource may have been created and you just did not get the response and you cannot check to see if the resource was created because you don’t know the URI it would have been assigned if it had, in fact, been created.
Benjamin suggests using PUT to a client-generated URI (based on a GUID) instead, which makes resource creation idempotent (at the cost of a little ugliness in the URI). (The solution suggested by Peter is somewhat strange though: He suggests using a PUT to a “new resource” URI which will return a server-generated URI to which the client PUTs again … I fail to see any improvement over POST).
The primary improvement is that with the redirected PUT request you never get stuck in a situation from which you cannot automatically recover. If you don’t get a response to the initial put “new resource” URI you can just repeat the request until you do. Once you have that response you know the real URI for the new resource and you can PUT to that URI until you get a response.