HTTP(HyperText Transfer Protocol,超文本传输协议),是Web服务器和客户端之间进行数据传输的规则。
HTTP请求方法
HTTP工作流程
(1)客户端通过TCP三次握手与服务器建立连接
(2)TCP建立连接成功后,向服务器发送HTTP请求。
(3)服务器收到客户端的HTTP请求后,将返回应答,并向客户端发送数据
(4)客户端通过TCP四次挥手,与服务器断开TCP连接。
HTTP协议本身是无状态无连接的,无状态是指它对事务的处理没有记忆功能。
持久连接与非持久连接
非持久连接就是每个TCP连接只用于传输一个请求消息和一个响应消息。HTTP/1.0默认使用的是非持久连接
持久连接是指服务器响应后,连接继续打开,同一对客户端/服务器之间的后续请求和响应都可以通过这个连接继续请求。持久连接又分为不带流水线和带流水线两种方式。不带流水线,客户端只有在收到请求的应答后才发出新的请求。流水线客户端每碰到一个引用就立即发出一个连接,效率要高.HTTP/1.1默认使用带流水线的持久连接。
HTTP请求报文格式
(1)请求行由3部分组成,分别为请求方法(如GET、POST等)、URI以及协议版本,常见的协议版本有HTTP/1.1
(2)请求头部由“关键字: 值”对组成
(3)空行,这一行表示请求头部结束,接下来为请求正文
(4)请求正文内容,如以POST方式提交的表单数据
HTTP响应报文格式
(1)状态码为3位数字,由1、2、3、4、5开头。其中,2开头的指响应成功;3开头的指重定向;4开头的指客户端错误;5开头的指服务端错误。
200:响应成功
400:错误的请求,发送的HTTP请求不正确
404:表示文件不存在
500:表示服务器内部错误
(2)响应头部
(3)空行
(4)响应正文,最常见的为HTML网页
HTTP的头域分为4种,为请求头域、响应头域、通用头域和实体头域。
捕获http数据包
由于很多PC端的网页都https加密了,所以捕捉不到相应的请求动作。这里我们使用手机客户端应用来抓包,举例:我们抓安卓手机上的APP–百度贴吧的http数据包。主要抓的是一个登陆操作的数据包。
分析GET方法的数据包
前3个数据包是TCP的三次握手。第4个数据包则是客户端向服务器发送的HTTP请求包。
选中数据包,右键Follow -> TCP Stream,请求包和响应包的详细内容:
通用头域Connection 表示是否需要持久连接,Keep-Alive表示持久连接
实体头域Content-Type表示实体数据的类型
分析POST方法的数据包
选中数据包,右键Follow -> TCP Stream,请求包和响应包的详细内容:
一般都是分析数据包首部信息,其实请求报文的正文内容也有值得分析的地方,尤其是POST数据请求包中,可能含有用户提交的个人信息。
比如,我们看一下bdusstoken,它代表的含义是百度用户token,那么其中就有用户名。
可用一条通用规则提取出用户名
bdusstoken@P(-1::0x424a4351:: P(21::0x41414141 :b:))
注:P是我自己写的抽象“提取方法”,格式为P(begin:length:endwith:method:P)
begin为起始位置,负数表示从尾部反向提取,-1指最后一个字符;
length为提取长度,可省略
endwith表示结束字符串,8个字符,一个字符1B
method表示编码方式,如 b表示Base-64编码
P表示可嵌套提取方法
提取到的部分为 “cnp4dzAz”,这里我的登录用户名是"rzxw03"
这是经过Base64编码的值,找一个可以进行解码的网站,验证下我们提取的对不对。
可见,是对的,至于为什么这样可以,这是秘密,哈哈哈哈哈哈哈哈。HTTP就到这里了,喜欢点个赞吧。