原文链接:http://blog.youkuaiyun.com/gideal_wang/article/details/4316691
1、一个URL地址,它用于描述一个网络上的资源,而HTTP定义了浏览器和服务器交互的4种基本方法:GET,POST,PUT,DELETE就对应着对这个资源的查 ,改 ,增 ,删 4个操作。GET一般用于获取/查询 资源信息,而POST一般用于更新资源信息
2、虽然4种基本的方法各自有着不同的用法,但是但在实际的做的时候,很多人却没有按照HTTP规范去做,导致这个问题的原因有很多,比如说:
a.很多人贪方便,更新资源时用了GET,因为用POST必须要到FORM(表单),这样会麻烦一点。
b.对资源的增,删,改,查操作,其实都可以通过GET/POST完成,不需要用到PUT和DELETE。
c.另外一个是,早期的但是Web MVC框架设计者们并没有有意识地将URL当作抽象的资源来看待和设计。
d.还有一个较为严重的问题是传统的Web MVC框架基本上都只支持GET和POST两种HTTP方法,而不支持PUT和DELETE方法。
3、HTTP请求的格式
<request line>
<headers>
<blank line>
<request-body>
在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。
紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。
在首部之后是一个空行,再此之后可以添加任意的其他数据(称之为主体(body))。
示例:
GET请求:
GET /DEMOWebServices2.8/Service.asmx/CancelOrder?UserID=string&PWD=string&OrderConfirmation=string HTTP/1.1
Host: api.efxnow.com
POST请求:
POST /DEMOWebServices2.8/Service.asmx/CancelOrder HTTP/1.1
Host: api.efxnow.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length
UserID=string&PWD=string&OrderConfirmation=string
GET提交,请求的数据会附在URL之后(就是把数据放置在请求行(request line)中),以?分割URL和传输数据,多个参数用&连接;
POST提交:把提交的数据放置在是HTTP包的包体中。
4、HTTP返回的格式
status line>
<headers>
<blank line>
[<response-body>]
两个请求的返回
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
示例:
<?xml version="1.0" encoding="utf-8"?>
<objPlaceOrderResponse xmlns="https://api.efxnow.com/webservices2.3">
<Success>boolean</Success>
<ErrorDescription>string</ErrorDescription>
<ErrorNumber>int</ErrorNumber>
<CustomerOrderReference>long</CustomerOrderReference>
<OrderConfirmation>string</OrderConfirmation>
<CustomerDealRef>string</CustomerDealRef>
</objPlaceOrderResponse>
在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。
常见的返回码:
200 (OK): 找到了该资源,并且一切正常。
304 (NOT MODIFIED): 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。
401 (UNAUTHORIZED): 客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。
403 (FORBIDDEN): 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。
404 (NOT FOUND): 在指定的位置不存在所申请的资源。