互联网测试必备知识-HTTP协议 Posted 2021-04-24 CSDN软测
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了互联网测试必备知识-HTTP协议相关的知识,希望对你有一定的参考价值。
一.HTTP协议简介
HTTP(HypertextTransferProtocol)协议,即超文本传输协议。
所谓协议,是指计算机网络中进行数据交换而建立的规则、标准或约定的集合。
说得简单些,就是协议定义了两台机算机之间的通信规则,通过协议,就可以达到相互通信的目的。
作为万维网上应用最广泛的协议,HTP协议的发展是万维网协会( World Wide Web Consortium)和 Internet工作小组IETF( Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC1945定义了HTTP/.0版本,其中最著名的就是RFC2616。
RFC2616定义了今天普遍使用的一个版本:HTP1.1。
HTTP协议的主要特点可以概括如下:
(1)简单:客户向服务器请求服务时,只需传送请求方法和路径;
请求方法常用的有GET、HEAD、POST,每种方法规定了客户与服务器联系的不同类型。
由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快;
(2)灵活:HTTP允许传输任意类型的数据对象。
正在传输的类型由Content-type加以标记
它的请求-响应模式为:客户端每次向服务器发起一个请求时都建立一个连接,服务器处理完客户的请求即断开连接;
(3)无状态:HTTP协议是无状态协议。
无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
二.HTTP工作原理
1.HTTP协议在TPC/IP协议簇中的位置
在Internet中所有的传输都是通过TCP/IP进行的,HTTP协议作为TCP/IP模型中应用层的协议也不例外,通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。
HTP在网络中的层次如下图所示:
通常情况下,HTTP的保留端口是80,HTTPS的端口号为443。
2.HTTP工作原理
通过上面的知识可以看出,HTTP是基于传输层的TCP协议,而TCP是一个端到端的面向连接的协议。
所谓的端到端可以理解为进程到进程之间的通信。
所以HTTP在开始传输之前,首先需要建立TCP连接,而TCP连接的过程需要所谓的“三次握手”。
在TCP三次握手之后,建立了TCP连接,此时HTTP就可以进行传输了。
下面我们通过一个例子来简单了解HTP协议的通信过程。
利用 Wireshark工具,我们对访问htt:/www.testroad.org页面进行一次捕捉,可以清楚地看到一个网页访问的全过程,如下图所示(其中客户端的P为:192.168.2.105,服务端的P为:121.41.43.186)。
客户端浏览器向服务端发起一个TCP连接请求,状态为SYN;
然后服务端向客户端浏览器做出回应,并要求确认,Seq=0,Ack=1;
客户端浏览器收到信息后,同样做出回应,并确认,此时Seq=l,Ack=1,TCP三次握手成功;
客户端浏览器向服务端发起一个HTTP页面请求,访问“/”根节点;
服务器向客户端浏览器发送数据及状态响应码200(中间过程是其他TCP连接产生的请求,具体内容不在这里说明,有兴趣的同学可以查阅TCP的相关知识)。
三.HTTP请求
知道了浏览器与服务器如何建立起连接后,下面我们要弄清楚的是HTTP协议如何传输内容的。
在HTTP的请求报文中,主要由3个部分构成:
上面是一个典型的HTTP请求报文,第一行为请求行:
请求行写法是固定的,由3部分组成,第一部分是请求方法,第二部分是请求网址,第3部分是HTTP版本。
“GET”表示请求方法,在HTTP1.1的协议中,一共支持7种请求方法:GET、POST、HEAD、 OPTIONS、PUT、 DELETE和 TRACE。
其中最常用的就是GET及POST。
“/”表示访问URL的根目录,这里也可以是HOST所在URL下的其他相对路径,如“/ images/bd bg. gif”表示访问HOST中的URL下的一个gif图片。
“HTP/1.1”表示协议及对应版本,现在主流的是1.1(2.0也有相关的版本出来,但还没得到广泛应用)。
从第二行开始到结束都是请求头,通常也称为头域。
每个头域由一个域名,日号(:)和域值3部分组成。
域名是大小写无关的,域值前可以添加任何数量的空格符。
下面介绍一些常用的头域。
Host头域指定请求资源的 Internet主机和端口号,必须表示请求r的原始服务器或网关的位置。
HITP.1请求必须包含主机头域,否则系统会以400状态码返回;
User-agent: Mo la/5. 0(Windows NT 6.1 Wow64; rvr 350)Geck 20100101 Firctox35 0
User- Agent表示请求者的一些信息,如什么浏览器类型和版本、操作系统等。
例如本例中的内容我们可以知道客户是使用 Firefox35.0版本的浏览器,基于 windows7 64位的操作系统。
这里的信息通常用来做数据收集,可以分析用户常用什么浏览器访问我们的服务;
Accapt: inage/ng, image/q=0.,*/:0-0,5
Accept用于指定客户端接受哪些类型的响应内容,也是能够在客户览器中直接打开的格式;
Accapt-larquage: zh-cn, zhiq-0 8, en-us: q-1-5, an:q 0. 3
Accept-i-anguage:是指客户的操作系统语言,我们通常情况下使用的中文操作系统这个属性是zh-cn;
Accent-eneeding: gzip, deflates
Accept-encoding:指客户端所能接受的编码规则或格式规范;
Rererer:http://www.testrcad.drg/chb/ceg.csb
Referer:可以理解为请求来源。
即当前地址的上一个依赖地址。
可以是绝对路径,也可以是相对路径。
与HOST拼接成完整的URL地址;
Connection:表示当clienti和werner通信时对于长链接如何进行处理,在HTTP1.1中client和 Server都是默认对方支持长链接的,如果lit使用HTIP1.协议,但又不希望使用长链接,则需要在 header I中指明 connectlon的值为 close:如果 SERVER方也不想支持长链接,则在 response中也需要明确说明 connection的值为 close。
不论 request还是 response的 header中包含了值为 close的 connection,都表明当前正在使用的TCP链接在当前请求处理完毕后会被断掉。
以后 client再进行新的请求时就必须创建新的TCP链接了;
还有一些常见的头域内容如:Date、Powy、 Cache-control, Cookies等,在这里不一一解释了,通过字面意思也大都能看懂它们的含义。
由于上面的例子是个GET请求,通常没有请求正文,我们通过一个POST请求来看看请求正文。
上面示例中的方框部分就是请求正文了,通常情况下对应的就是POST提交的内容信息。
四.HTTP应答
HTTP应答报文与请求报文相类似,也是由三部分构成的:
应答行,类似于HTTP请求行,它表示通信协议用的是HTTP1.1版本,“200”表示服务器已经成功地处理了客户端发送的请求。
以下是常见的HTTP请求应答返回码列表:
应答头的内容与请求头也类似,几个需要注意的头域如下:
应答正文由于使用了压缩技术,这里就略过不提。
通常情况下是基于html 的页面信息。
当我们访问一个页面时,是否只产生了一个HTTP请求?当然不是,我们看到的一个完整的Web界面,通常情况下是由多个HTIP请求共同完成的,一般情况下,在浏览器对HTML解析的过程中,如果发现需要获取的内容(如CSS,GIF,PNG等),会再次发起HTTP请求去服务器获取,但只依靠一个TCP连接就够了,这就是所谓的持久连接,也是所谓的一次HTTP请求完成,现在一些浏览器会启动多个线程去进行资源下载,减短下载总时间提供更好的客户体验。
五.HTTP捕获
在性能测试过程中,我们需要对业务系统的传输内容有一定的了解,需要捕捉到协议内容,才能更好地实现模拟用户行为。
那么我们如何捕获在网络上传输的HTTP协议内容呢?目前主流的工具有下面这些。
Wireshark: Windows下最常用的网络抓包工具,使用简单方便,上面的例子所用的工具就是这款。
但是此工具捕获到的包通常都是十六进制的,不便于我们后期性能测试过程中对HTTP协议的传输内容进行二次加工。
Firefox下的 Firebug:可以清楚地看到每个页面传输的内容,页面构成。
使用也比较简单,在 Firefox下工具一附加组件中搜索 Firebug组件并安装即可,效果如下图所示:
Chrome不需要安装任何组件,直接按Ctrl+shift+I组合键或者F12键,就可以调出相关的工具进行查看HTTP协议的请求内容,效果如下图所示:
IE下也有个工具 Http Watch,在下面的章节我们将重点介绍此工具,并利用此工具进行简单的页面前端性能分析。
六. Http Watch
Http Watch是强大的网页数据分析工具,集成在 Internet Explorer工具栏中,能够收集并显示HTTP协议交互的深层信息。
只需要选择相应的网站,就可以对网站与E之间的请求回复的通讯情况进行分析,并在同一界面显示其相应日志记录。
每一个HTTP记录都可以详细地分析其 Cookies、消息头、字符查询等信息。
支持 ETTPS及分析报告输出为XML、CSV等格式。
目前最新的版本是10.0.5,最稳定的版本是9.4。
并且已支持火狐,但是在火狐下有更好的工具( Firebug),所以使用率并不高,主要还是在E上的应用。
大家可以通
过其官方网站进行下载。
Http Watch安装比较简单,安装成功后,访问一个网站,在E的工具选项上找到“ Http watch Basic”选项,点击就可以在浏览器的下方出现 Http Watch的主界面,如下图所示:
1. Httpwatch录制
我们点击工具上的“ Record”按钮,然后访问一个URL,等界面完全展现后,单击“Stop”按钮,就可以生成一次HTTP的交互结果,如下图所示:
我们把整个 Http Watch面板划分成3个区域:菜单区、数据区、数据明细区。
菜单区主要是一些常用的功能按钮,比如录制、停止、清除、査询、过滤等等。
数据区存放我们访问的URL及其相关资源(如图片、css等)。
数据明细区是针对某个URL进行详细的分析。
2.HttpWatch数据分析
在数据区,我们可以看到一个界面是由多少个URL请求组合而成。
下面对这个区域的每个列做个简单的分析:
Strted:这里的时间指的是相对于第一个请求,其他请求发出的时间偏移,在上图中,我们第一个请求中的“00:00:00.502”表示的是相对于第一个请求,这个请求是在502毫秒后发起的,是一个相对值。
Time Chart:每个请求所花费时间的具体分布,这里的内容可以在数据明细区得到具体的展现,下文会再赘述,这里提取一个图中的细节,我们把这个列放大,可以看到几条线以及对应的加载业务所用的时间,如下图所示:
DOM Load线(蓝色)表示:开始加载页面Dom,
Page Load线(红色)表示开始加载页面具体信息(文本、图片等)。
HTTPLoad(灰色)线表示所有从服务器上下载的资源都已下载完成。
、Render Start(绿色)线表示在浏览器上显示的第一个内容。
Time:每个URL请求所花费的具体时间,单位是秒;
Sent:每个请求发送出去的数据大小,包括HTIP请求头的大小和任何的数据,单位是 Bytes;
Received:服务器返回的数据总量,单位为 Bytes;
Method:HTTP请求的方法,常见的就是GET和POST;
Result:HTP请求应答返回码,当某个请求是通过缓存展现的,此处会显示为{ Cache},在这里要注意,如果列表中出现404等错误信息的返回码,需要让开发及时处理,有些错误在界面上是感知不到的;
Type:描述URL请求的类型,主要有以下几种:html、css、 javascript 、 Image、 redirect;
在数据区的最下方,有一行统计的信息。
相对而言,这里才是我们最需要关注的地方。
在这里,我们需要关注以下数据:Time反映了整个界面加载完成的时间,也就是通常情况下的用户响应时间,这个值过大的话,会严重影响用户体验。
Sent、 Received之和体现了单用户访问的网络流量。
如果比较大的话,在多用户使用的情况下,网络带宽会成为瓶颈。
在 Method列的最下方统计的是请求的个数,当这个请求数过多的时候,我们就需要考虑是
否需要对CSS做合并,对图片做些合并,以减少服务器资源开销。
当你选择一个URL或者资源时,就会在数据明细区展现与其相关的具体信息,分成多个标签页面,可以查看不同的内容。
Overview:这里是某个URL的概述信息,展示访问的地址、时间、连接的IP及返回的状态信息等;
Time Chart:访问某个URL的所有时间花费,从建立连接到完全展现,通过不同的颜色进行区分,当你发现某个页面展现很慢的时候,可以通过排序查找到最耗时的界面,然后查看这个标签页面,简单地分析下时间花费在哪个节点上。
每种颜色对应的说明可以在右下角的说明中查看到;
Headers:展现HTTP协议的头域信息,包含发送的请求及接收到的应答,具体的字段说明可以参考前文HTP协议请求和应答的相关内容,这里是我们分析报文的最主要来源;
Cookies、Cache:
存放页面相关的缓存信息,当我们需要测试缓存刷新、过期、缓存内容是否存放正确时,可以通过这个标签页进行查看并分析;
POST Date:这里存放的是POST请求中的请求正文,下图中的数据是在 Road Testing官网的主页面上,我们通过搜索功能,产生的POST请求,可以看到,虽然我们在界面上只是传了一个 search值,但是实际上我们传了这么多的参数;
Stream:数据流,完整地展现了整个请求过程的数据。
在这里我们可以看到完整的数据请求,包含协议头及请求正文。
在査看POST的请求时,我们还可以看到每个参数之间是通过什么组合在一起的,以及组合的顺序;
SSL:这个只在HTTPS请求下,オ会看得到,显示的是加密后的请求内容;
Warrings:告警, Http watch会自带一些安全较验、语法校验等内容,平常看看就可以,不需要过分的关注。
当你希望下次不对内容进行检查时,可以忽略警告。
以上就是这款工具的简单使用。
整体而言,此工具在我们做WEB测试时,能够提供很多的帮助。
首先,通过简单的录制,就可以捕获到所有的通信报文,比一般的抓包工具更方便。
通过数据区的数据分析,我们可以知道页面的组成部分及一些黑盒测试不能感知的数据(请求数、请求返回状态等)。
这些数据对我们优化整个系统有很大的帮助,也更直观。
在数据明细区,我们可以观察每个请求的具体内容是什么,页面上缓存了哪些东西,这些缓存的有效期是否正确等等,让我们更深刻地了解HTTP协议。
通过这些数据的查看,我们可以对传输的内容进行二次组装,来完成一些简单的自动化或者性能測试。
关于 Http Watch的使用,更多的内容可以查看其自带的帮助文档httpwatch.chm,在其安装目录下。
以上是关于互联网测试必备知识-HTTP协议的主要内容,如果未能解决你的问题,请参考以下文章
软件测试知识学习路线
玩转接口测试 & 性能测试 之 必备基础知识:Web协议
前端必备性能知识 - http2.0
小白入门必备http协议解析
软件测试流程图!转行互联网职场必备!
软件测试流程图!转行互联网职场必备!