Request methods
There are six request methods, but only three are used in practice:
- GET
-
Retrieves a resource. A query can be used to add extra information to the GET request and, as we discussed in our introduction to URLs, these are appended to the URL itself. A database search is a good example of an application of the GET request: the resource is likely to be a web script, and the query component of the URL is the search conditions.
- POST
-
Sends data to a server. Rather than appending data to the URL, the data is sent in the body of the HTTP request.
- HEAD
-
Returns only the header fields in a response, not the resource itself. This can be used for lightweight retrieval, so that the modification date of a resource can be checked before the full resource is retrieved with GET.
- DELETE
-
Allows a resource identified by the URL to be deleted from a server. This is the counterpart to the PUT method and allows an author to remove a resource from the specified URL. Usually not implemented.
- PUT
-
Similar to the POST method, this method is designed to put a resource onto a server that can be later retrieved with the URL in the PUT request. Some HTML editors and web servers support the PUT methods allowing authors to put resources onto a web site at the specified URL. Usually not implemented.
- TRACE
-
Produces diagnostic information.
The HTTP standard divides these methods into those that are safe and those that aren't. The safe methods-GET and HEAD-don't have any persistent side effects on the server. The unsafe methods-POST, PUT, and DELETE-by their nature are designed to have persistent effects on the server. The standard allows for clients to warn users that a request may be unsafe, and a browser should not resend a request with the POST method without user confirmation.
The HTTP standard further classifies methods as idempotent when a request can be repeated many times and have the same effect as if the method was called once. The GET, HEAD, PUT, and DELETE methods are classified as idempotent; the POST method isn't.