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

ubuntu 10.04 LTS 初体验

Posted on Mon, 03 May 2010 12:30:41 -1100

哈哈,笨兔新的lts版终于出来了,五一期间体验了把,感觉还不错,其实自从8.04后感觉一直都不错........

1.悲剧的wubi安装,

这次的安装还是采用了最最SB的方式,wubi,但是安装起来却费了一番时间,主要是开始装了下,因为种种原因又卸载了,

然后grub就认不到再次安装的笨兔了........

只能从网上搜罗一堆关于grub的信息,自己想法子修复了[真没想到自己这次用wubi安装还这么悲剧]

修复后的grub应该有类似下面的文字

menuentry "unbuntu 10.04 LTS (on /dev/sda8)" {
 insmod ntfs
 set root='(hd0,8)'
 loopback loop0 /ubuntu/disks/root.disk
 set root='(loop0)'
 linux /boot/vmlinuz-2.6.32-21-generic root=/dev/sda8 loop=/ubuntu/disks/root.disk ro
 initrd /boot/initrd.img-2.6.32-21-generic
 boot
}

而一开始进不去的时候就在命令行把上面的东西输入一遍就行了,

进去后在把类似的文字加在grub.cfg文件中或者用简单的方法update-grub2然后reboot,当然你也可以去修改menu.lst

2.悲剧的无线网卡

broadcom的网卡默认驱动会有问题,能识别到,但是搜不到无线网络......

关键是我没有额外的网线了,再准确点说上网的密码也记不得了,只有一个tplink.............

悲剧的又要向别人借网线把那个bmwcl的kernel包给装上......

3.悲剧的intel集成显卡

原以为从9.10后intel的烂显卡会好一点,但是实际上并不是如此,虽然默认的驱动特效能打开了

但是用clutter这类库的时候总会有这样那样的问题,记得9.10上也是如此,这方面n卡的驱动做的不错,效果好安装也容易,

于是编译安装了最新版的intel的2d驱动,最新版的mesa.....

还是有问题........

偶然间把驱动给屏蔽掉,发现分辨率并没变小,只是特效开不了而已,但是clutter库的动画效果运行正常了......

这也太悲剧了点........

不过按照英特尔官方的站点有提供clutter和cairo的下载,感觉应该是能够支持的啊.......

唉,现在还没找到解决问题的办法,下次买本打死不买英特尔的集显了.........