HTTP defines eight methods indicating the desired action to be performed on the identified resource.
Methods GET and HEAD are defined as safe, i.e. intended only for information retrieval. Unsafe methods (such as POST, PUT and DELETE) should be displayed to the user in a special way (e.g. as buttons rather than links), making the user aware of possible side effect of their actions (e.g. financial transaction).
Methods GET, HEAD, PUT and DELETE are defined to be idempotent, meaning that multiple identical requests should have the same effect as a single request. Also, the methods OPTIONS and TRACE should not have side effects, and so are inherently idempotent.
Despite the specified idempotence of GET requests, in practice, GET requests are often used to pass HTML form values or other data to an HTTP server. These requests can cause changes on the server, through CGI execution, which may result in different effects for successive identical requests. For example, an HTML page may use a link to cause the deletion of a database record; merely GET-ing a particular URL on a server will cause the CGI application on the server to delete a record, thus causing a change of the server's state and possibly making identical following requests to this URL to fail, on account of the database record already being deleted. This behavior is technically discouraged (non-idempotent actions should ideally be initiated by a POST request) but is very common on the modern World Wide Web. Such behavior can cause problems because various schemes for caching web pages, such as search engines, which by design GET pages before a user initiates a request, can cause unintentional changes on a server.
HTTP servers are supposed to implement at least GET and HEAD methods and, whenever possible, also OPTIONS method.