http头部元素分析
浏览器端向服务器端发送的请求Header如下:
Host | zhiqiang.org | 请求的域名 |
User-Agent | Mozilla/5.0... | 浏览器端浏览器型号和版本 |
Accept | text/xml,application/xml ... | 可接受的内容类型 |
Accept-Language | zh-cn,zh;q=0.5 | 语言 |
Accept-Encoding | gzip,deflate | 可接受的压缩类型 |
Accept-Charset | UTF-8,* | 可接受的内容编码 |
Cookie | user=someone | 浏览器端的用户COOKIE |
If-Modified-Since | Wed, 14 Nov 2007 02:01:00 GMT | 浏览器端的缓存的最后修改时间 |
If-None-Match | "2a541d-5b45-efde6f00" | 浏览器端的缓存文件地标识符 |
而服务器端的响应Header大致为:
Date | Wed, 14 Nov 2007 05:11:47 | 服务器端时间 |
Server | Apache/2.2.6 | 服务器端的服务器软件 |
Last-Modified | Wed, 14 Nov 2007 01:38:50 | 最后修改时间 |
Etag | "39457e-6234-a0983e80" | 文件标识符 |
Content-Encoding | gzip | 传送启用了GZIP压缩 |
Content-Length | 8562 | 内容长度 |
Content-Type | text/html | 内容类型 |
例如:http://localhost:8080/simple.htm
结果如下:
协议名:http
主机名:localhost
端口:8080
对象路径:/simple.htm
2 把以上部分结合本机自己的信息,封装成一个HTTP请求数据包
3 使用TCP协议连接到主机的指定端口(localhost, 8080),并发送已封装好的数据包
4 等待服务器返回数据,并解析返回数据,最后显示出来
由截取到的数据包我们不难发现浏览器生成的HTTP数据包的内容如下:
GET /simple.htm HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/x-shockwave-flash, application/vnd.ms-excel,
application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: localhost:8080
Connection: Keep-Alive
消息的第一行“GET”表示我们所使用的HTTP动作,其他可能的还有“POST”等,GET的消息没有消息体,而POST消息是有消息体的,消息体的内容
就是要POST的数据.后面/simple.htm就是我们要请求的对象,之后HTTP1.1表示使用的是HTTP1.1协议.
第二行表示我们所用的浏览器能接受的Content-type,三四两行则是语言和编码信息,第五行显示出本机的相关系信息,包括浏览器类型、操作系统信息等,很多网站可以显示出你所使用的浏览器和操作系统版本,就是因为可以从这里获取到这些信息.
第六行表示我们所请求的主机和端口,第七行表示使用Keep-Alive方式,即数据传递完并不立即关闭连接.
服务器接收到这样的数据包以后会根据其内容做相应的处理,例如查找有没有“/simple.htm”这个对象,如果有,根据服务器的设置来决定如何处理,如果是HTM,则不需要什么复杂的处理,直接返回其内容即可.但在直接返回之前,还需要加上HTTP消息头.
服务器发回的完整HTTP消息如下:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
X-Powered-By: ASP.NET
Date: Fri, 03 Mar 2006 06:34:03 GMT
Content-Type: text/html
Accept-Ranges: bytes
Last-Modified: Fri, 03 Mar 2006 06:33:18 GMT
ETag: “5ca4f75b8c3ec61:9ee”
Content-Length: 37
消息头第一行“HTTP/1.1”也是表示所使用的协议,后面的“200 OK”是HTTP返回代码,200就表示操作成功,还有其他常见的如404表示对象未找到,500表示服务器错误,403表示不能浏览目录等等.
第 二行表示这个服务器使用的WEB服务器软件,这里是IIS 5.1.第三行是ASP.Net的一个附加提示,没什么实际用处.第四行是处理此请求的时间.
第五行就是所返回的消息的content-type,浏览器 会根据它来决定如何处理消息体里面的内容,例如这里是text/html,那么浏览器就会启用HTML解析器来处理它,如果是image/jpeg,那么 就会使用JPEG的解码器来处理.
消息头最后一行“Content-Length”表示消息体的长度,从空行以后的内容算起,以字节为单位,浏览器接收到它所指定的字节数的内容以后就会认为这个消息已经被完整接收了.