一、基础篇
所谓HTTP请求方法就是你提前告诉服务器你要进行什么类型的操作,如同你吃饭前先点菜,告诉餐厅要给你准备做什么样的菜。
一共有8个类型的方法
GET | HEAD | POST | PUT | DELETE | OPTIONS | TRACE | 扩展方法 |
- GET
顾名思义,好比小孩子问妈妈要糖果一般,伸手问服务器拿东西。服务器在存在该资源并允许的情况下返回资源,否则返回其他,比如不存在则是404 NOT FOUND
- HEAD
HEAD头部,http报文中有一项叫做头部信息,与GET方法类似,同样是问服务器要资源,但是与GET不同的是,http在响应中只会返回实体的首部信息,而不是完完全全地返回实体的主体部分。
因此,这就好比部队打仗前的哨兵探路一般。
HEAD通常用于打探情况,使用HEAD——
- 你可以在不获取资源的情况下很快地就能了解到资源的情况,比如其类型,其文件大小,
- 也可以通过响应码查看是否存在该资源,
- 也可以检测资源是否被修改了。
- PUT
与GET恰好相反,收获前得先付出。 PUT方法就用于向服务器提交东西,上传东西,写入修改东西。
- POST
POST用于向服务器提供表单数据。
- DELETE
就是删除,请求服务器删除请求URL中指定的资源。
- OPTIONS
选项,因此该方法就是请求服务器告知客户端其所能支持的方法。由于后面HTTP提供给开发者一个扩展方法的权利。并且这个七个方法中不是每一个方法服务器都会支持实现,取决于服务器开发者。
好比于点菜前我们需要问餐厅要的餐单,看看其提供什么菜色。
一般来说,服务器会返回其所支持的方法。
- TRACE
TRACE为追溯,就是追根溯源的意思。
我们点餐时可能是以口头方式告诉服务员,然后服务员告诉大厨,这传递的过程中可能由于口误或者听错等原因修改了传递的信息。
同理,当客户端向服务器发起一个请求时,这个请求可能需要穿过防火墙,代理,网关等中间节点才能到达服务器,这些中间节点有权修改原始的HTTP请求,那么HTTP允许客户端发起这样一个请求,让服务器返回一条最终达到服务器的请求给客户端,好让客户端知道自己的原始请求是否被修改了,修改了哪些地方。
(8)扩展方法
因为上述七个方法尽管已经满足基本要求了,但是仍然会有特殊情况所不能满足。因此扩展方法就是在HTTP1.1规范中没有定义的方法,因此HTTP允许开发者自定义一些市实现方法。比如LOCK,MOVE ,COPY 等等。
二、番外篇-关于 PUT 与 POST的区别
在HTTP官方定义中
The POST method is used to request thatthe origin server accept the entity enclosed in the request as a newsubordinate of the resource identified by the Request-URI in the Request-Line
POST方法是用在请求中的,起源服务器把请求中的实体内容作为请求URI在请求行所指定的资源的下属资源。
The PUT method requests that the enclosedentity be stored under the supplied Request-URI. If the Request-URI refers to an already existing resource, the enclosedentity SHOULD be considered as a modified version of the one residing on theorigin server. If the Request-URI does not point to an existing resource, and that URI iscapable of being defined as a new resource by the requesting user agent, theorigin server can create the resource with that URI."
PUT方法则是要求被封装的实体是存储在请求URI指定的地方。
如果请求的URI指向已经存在的资源,那么封装的实体应该被视为驻留在原始服务器上实体的修改后的版本。
而在stackOverFlow上的讨论也趋向于这么一个观点:
PUT是幂等的,所谓幂等就是重复操作是否会导致一样的结果,在下面英文中进行了举例,比如x = 5就是幂等的,你执行多少次都是没关系,结果一样,但是 x++就不是,执行每次的结果都不一样。PUT就是幂等的。
PUT implies putting a resource -completely replacing whatever is available at the given URL with a differentthing. By definition, a PUT is idempotent. Do it as many times as you like, andthe result is the same. x=5 isidempotent. You can PUT a resource whether it previously exists, or not (eg, toCreate, or to Update)!
POST updates a resource, adds asubsidiary resource, or causes a change. A POST is not idempotent, in the waythat x++ is not idempotent.
注:出处是http://stackoverflow.com/questions/630453/put-vs-post-in-rest
个人理解:PUT和 POST都可以用来创建服务器上的资源,并进行修改,但是如何选择使用,取决于使用POST的时候,重复请求会不会造成不同的结果,如果是那么就必须使用PUT。如果不是,那么用PUT和 POST都没关系咯。