本节将介绍上一节提到的三种协议数据包分析。
上节提到一次与服务器交互的过程会有请求和返回,而每一种协议的请求和返回的数据格式都会包含“头部(head)”,“身体(body)”。
- 头部主要是存放一些固定格式的信息用于定义本条数据
- 身体主要是存放一些用户自定义参数。
1.http协议
http协议是我们最常见的协议,http请求与http返回的区别就是http请求会有一个请求地址,而http返回没有请求地址,但会有一个返回码。
http请求
http的请求地址格式就是我们接触最多网站url,比如“http://www.baidu.com”
http协议的请求会分为4个类型:POST,GET,PUT,DELETE,比较常用的是POST和GET。POST和GET的区别在于,POST的请求参数是放在“身体”中的,而GET是放在在URL的后面,用?隔开。
(fiddler get请求配图)
(filldler post配图)-
http的请求头部中可以看到这个请求的好多信息,比较常用的有以下几个:
- Host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号。
- User-Agent:表明该请求是哪种浏览器发出来的
- Accept:告诉WEB服务器自己接受什么介质类型,/ 表示任何类型,type/* 表示该类型下的所有子类型
- Accept-Encoding: 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法 (gzip,deflate)
- Connection:
close(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,断开连接,不要等待本次连接的后续请求了)。
keepalive(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求)。 - Cookie:带上浏览器上同源的cookie信息
-
一个实例:
Host:rss.sina.com.cn
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14
Accept:text/xml,application/xml,application/xhtml+xml
Accept-Language:zh-cn,zh;q=0.5
Accept-Encoding:gzip,deflate
Accept-Charset:gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive:300
Connection:keep-alive
Cookie:userId=C5bYpXrimdmsiQmsBPnE1Vn8ZQmdWS
If-Modified-Since:Sun, 01 Jun 2008 12:05:30 GMT
Cache-Control:max-age=0
http返回
http返回码
HTTP响应码响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行。
响应码分五种类型,由它们的第一位数字表示:
1xx:信息,请求收到,继续处理
2xx:成功,行为被成功地接受、理解和采纳(常见:200)
3xx:重定向,为了完成请求,必须进一步执行的动作(常见:302)
4xx:客户端错误,请求包含语法错误或者请求无法实现(常见:404,页面找不到)
5xx:服务器错误,服务器不能实现一种明显无效的请求(常见:500,服务器错误)返回头部介绍
Server:说明了服务器的类型
Content-Length:返回体的大小
Set-cookie:给浏览器添加一个cookie
Content-Type:返回内容的格式
Connection:连接是否关闭一个实例:
Status:OK - 200
Date:Sun, 01 Jun 2008 12:35:47 GMT
Server:Apache/2.0.61 (Unix)
Last-Modified:Sun, 01 Jun 2008 12:35:30 GMT
Accept-Ranges:bytes
Content-Length:18616
Set-cookie:user=adfsfsfsf
Cache-Control:max-age=120
Expires:Sun, 01 Jun 2008 12:37:47 GMT
Content-Type:application/xml
Connection:close
http数据包抓包
- 我们可以通过“抓包”来获取一个详细的http数据包。常见的http抓包工具有:fiddler,charles,wireshark,tcpdump和浏览器自带的开发者模式中的network工具栏。如下图为fiddler抓包的情况。
(配图) - http请求http的请求可以在fiddler的这里看到,
(配图)