HTTP报文实例
Posted on Mon, 12 Jul 2010 00:43:03 -1100本文整理自网络,原始链接不知何处........
在罗列具体的实例之前,先啰嗦几句概念性的东西.
GET,POST,SOAP都是基于HTTP协议的,但是,
POST 是被设计用来向上放东西的,而GET是被设计用来从服务器取东西的,
GET也能够向服务器传送较少的数据,而Get之所以也能传送数据,
只是用来设计告诉 服务器,你到底需要什么样的数据.
POST的信息作为HTTP 请求的内容,而GET是在HTTP 头部传输的.
当然数据传送量上,POST自然要多些...
而SOAP是依赖于HTTP POST模式实现的,它遵循一种特殊的xml消息格式
在SOAP中,Content-type设置为: text/xml,任何数据都可以xml化
具体看以下HTTP的格式
发送
<request line> <headers> <blank line> [<request-body>]
接收
<status line> <headers> <blank line> [<response-body>]
在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。
而常用的状态码如下
◆200 (OK): 找到了该资源,并且一切正常。 ◆304 (NOT MODIFIED): 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。 ◆401 (UNAUTHORIZED): 客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。 ◆403 (FORBIDDEN): 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。 ◆404 (NOT FOUND): 在指定的位置不存在所申请的资源。
下面仅是HTTP中最常用的GET和POST方法几个实例,以及基于POST的SOAP方法
GET 方法
发送:
GET /DEMOWebServices2.8/Service.asmx/CancelOrder?UserID=string&PWD=string&OrderConfirmation=string HTTP/1.1 Host: api.efxnow.com
接收:
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>
注意其中没有实质的内容,自然也没有CONTENT-LENGTH,所以在CGI中若是GET方法发送的报文,通过环境变量获得的值为NULL
特别要注意其中的空行,之前是报文头,之后是报文的实际内容,下面的POST方法,发送时也有类似的规则
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
接收
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>
最后再介绍一种基于POST的方法
SOAP方法(soap 1.2)
发送
POST /DEMOWebServices2.8/Service.asmx HTTP/1.1 Host: api.efxnow.com Content-Type: application/soap+xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> <soap12:Body> <CancelOrder xmlns="https://api.efxnow.com/webservices2.3"> <UserID>string</UserID> <PWD>string</PWD> <OrderConfirmation>string</OrderConfirmation> </CancelOrder> </soap12:Body> </soap12:Envelope>
回复
HTTP/1.1 200 OK Content-Type: application/soap+xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> <soap12:Body> <CancelOrderResponse xmlns="https://api.efxnow.com/webservices2.3"> <CancelOrderResult> <Success>boolean</Success> <ErrorDescription>string</ErrorDescription> <ErrorNumber>int</ErrorNumber> <CustomerOrderReference>long</CustomerOrderReference> <OrderConfirmation>string</OrderConfirmation> <CustomerDealRef>string</CustomerDealRef> </CancelOrderResult> </CancelOrderResponse> </soap12:Body> </soap12:Envelope>
另外要补充说明的是,上面例子中报文头部分都比较简单,还有一些特别的属性可以根据需要添加,
比如要求服务器自动断开链接等功能就可以通过一些属性来设置
再举两个例子
GET发送
GET /books/?name=Professional%20Ajax HTTP/1.1 Host: www.wrox.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Connection: Keep-Alive
POST发送
POST / HTTP/1.1 Host: www.wrox.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Content-Type: application/x-www-form-urlencoded Content-Length: 40 Connection: Keep-Alive (----此处空一行----) name=Professional%20Ajax&publisher=Wiley