PUT doesn’t come up much with plain html work. Pages and forms pretend that everything is a get or a post. But once one is working with web services, your choices are:
SOAP – send everything as an HTTP POST. HTTP is being used mainly to dodge firewalls and not really providing any benefit. Protocol was intentionally designed to be too complex for humans, leading to dependence on tools.
REST – use verbs applied to nouns. HTTP has other useful verbs besides GET and POST.
Unfortunately, PUT is conceptually similar so easy to get confused. I thought I’d mention here in one spot the two key differences:
a) PUT is indempotent. Repeating the same operation should get the same result. Side effects are allowed, but the side effects should be the same for repeated requests. POST is not indempotent. Repeating the same operation may yield different results.
b) PUT contains the actual item for a specified resource. POST provides an item for the specified resource to work with.
For a practical example, POST would be used to tell an account to add a new note to it, while PUT would be used to edit the contents of a note. PUT can’t do an “append” operation, if you POST your ‘add a note’ twice you have two notes, if you PUT the same note twice you just have the one note in the end.
I think it’s really important to consider both of these things together – the side effects are different, and the entity you specify are different – PUT says “this resource is this data”. POST says “this resource should work with this data”.
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html for a primary source