独角兽企业重金招聘Python工程师标准>>>
一、概述
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。还有两个则为扩展型协议请求方法Head、Options。
二、请求方法含义
Get:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。Head:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。Post:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。Put:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。Delete:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。Options:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。三、请求方法详解
1.Get描述
根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的,提交的数据最多只能是1024字节。
所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。这里安全的含义仅仅是指是非修改信息。幂等的意味着对同一URL的多个请求应该返回同样的结果。这里我再解释一下幂等 这个概念
幂等(idempotent、idempotence)是一个数学或计算机学概念,常见于抽象代数中。
幂等有一下几种定义:
单目运算:如果一个运算对于在范围内的所有的一个数多次进行该运算所得的结果和进行一次该运算所得的结果是一样的,那么我们就称该运算是幂等的。比如绝对值运算就是一个例子,在实数集中,有abs(a)=abs(abs(a))。双目运算:则要求当参与运算的两个值是等值的情况下,如果满足运算结果与参与运算的两个值相等,则称该运算幂等,如求两个数的最大值的函数,有在在实数集中幂等,即max(x,x)=x。
但在实际应用中以上2条规定并没有这么严格。
2.Post描述
根据HTTP规范,POST表示可能修改变服务器上的资源的请求,理论上POST没有限制,可传较大量的数据,IIS4中最大为80KB,IIS5中为100KB。GET和POST的一些原理性的问题。但在实际的做的时候,很多人却没有按照HTTP规范去做,导致这个问题的原因有很多,比如说:
很多人贪方便,更新资源时用了GET,因为用POST必须要到FORM(表单),这样会麻烦一点。对资源的增,删,改,查操作,其实都可以通过GET/POST完成,不需要用到PUT和DELETE。另外一个是,早期的但是Web MVC框架设计者们并没有有意识地将URL当作抽象的资源来看待和设计 。还有一个较为严重的问题是传统的Web MVC框架基本上都只支持GET和POST两种HTTP方法,而不支持PUT和DELETE方法。
以上3点典型地描述了老一套的风格(没有严格遵守HTTP规范),随着架构的发展,现在出现REST,它出来一套支持HTTP规范的新风格,可以参考《RESTful Web Services》。
四、表现形式
1.Get
Get请求GET /DEMOWebServices2.8/Service.asmx/CancelOrder?UserID=string&PWD=string&OrderConfirmation=string HTTP/1.1 Host:
Get响应
HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <objPlaceOrderResponse xmlns="/webservices2.3"> <Success>boolean</Success> <ErrorDescription>string</ErrorDescription> <ErrorNumber>int</ErrorNumber> <CustomerOrderReference>long</CustomerOrderReference> <OrderConfirmation>string</OrderConfirmation> <CustomerDealRef>string</CustomerDealRef> </objPlaceOrderResponse>
2.Post
Post请求POST /DEMOWebServices2.8/Service.asmx/CancelOrder HTTP/1.1 Host: Content-Type: application/x-www-form-urlencoded Content-Length: length UserID=string&PWD=string&OrderConfirmation=string
Post响应
HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <objPlaceOrderResponse xmlns="/webservices2.3"> <Success>boolean</Success> <ErrorDescription>string</ErrorDescription> <ErrorNumber>int</ErrorNumber> <CustomerOrderReference>long</CustomerOrderReference> <OrderConfirmation>string</OrderConfirmation> <CustomerDealRef>string</CustomerDealRef> </objPlaceOrderResponse>