概述
HTTP 定义了一组请求方法, 以表明要对给定资源执行的操作。通过请求方法向服务器表明针对给定资源要执行的期望动作。 虽然他们也可以是名词, 但这些请求方法一般被称为HTTP动词.。每一个请求方法都实现了不同的语义。
HTTP METHOD是根据HTTP的使用场景不断增加完善的: HTTP/0.9中只有GET方法。 HTTP/1.0时增加了POST和HEAD。 HTTP/1.1增加了OPTIONS,PUT,PATCH,DELETE,TRACE和CONNECT这5种方法。
GET
向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络爬虫等随意访问。
HEAD
与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
POST
在restful中,POST通常用来创建一个新的资源实例。客户端向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源。
PUT
PUT通常用来更新一个资源。与PATCH相比,PUT通常用来更新一个资源的全量信息,而PATCH则大多用来更新部分(partial)信息。
PATCH(由 RFC 5789 指定的方法)
用于将局部修改应用到资源。
DELETE
在restful中,DELETE用作请求服务器删除Request-URI所标识的资源。
TRACE
回显服务器收到的请求,主要用于测试或诊断。
OPTIONS
这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。 方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed),当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。
HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。当然,所有的方法支持的实现都应当匹配下述的方法各自的语义定义。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。 例如,在老一点的浏览器客户端(比如只支持HTTP/1.0版本的浏览器实现)中,如果使用DELETE或者PATCH这些1.1版本才加入的HTTP Method会出现错误。所以通常可以在header中加入
X-HTTP-Method-Override
即:
X-HTTP-Method-Override: PATCH
这样服务端接收到的请求依然是POST,但是通过解析Header中的X-HTTP-Method-Override就可以拿到真正的HTTP Method。
安全方法和幂等
安全方法
“安全方法”是指只获取资源信息而没有其它意义的请求。比如常见的“安全的”方法有: GET HEAD OPTIONS TRACE 而常见的“不安全的”方法有: POST PUT DELETE PATCH
幂等
在日常工作中,我们经常可以看到一个词“幂等”。所谓的幂等性就是只用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。 常见的HTTP Method: GET、HEAD、OPTIONS、TRACE、PUT、PATCH都具有幂等属性。 而POST、DELETE则不具有幂等性。