HTTP—软件测试专项技术(6)

发表于:2020-4-26 13:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:51Testing教研团队    来源:51Testing软件测试网原创

分享:
  1.2.7  HTTP
  超文本传输协议(HyperText Transfer Protocol,HTTP)是Web联网的基础,也是手机联网常用的协议之一。
  从图1-15可以看出相关协议和OSI参考模型的关系。
  从图1-15中还可以看出,HTTP是一个应用层协议,也就是传输层的上一层协议。HTTP只定义传输的内容,不定义传输方式(这是底层协议做的事情),因此,要想理解HTTP,只需要理解协议的数据结构及其意义。
  HTTP是一种请求-应答式协议。其显著特点是客户端发送的每个请求都需要服务器返回响应,而且在请求结束后,它会主动释放连接。从建立连接到关闭连接的过程称为"一次连接"。
  下面比较HTTP 1.0和HTTP 1.1之间的差异。
  ●在HTTP 1.0中,对客户端的每个请求都要建立一次单独的连接,在处理完请求后,自动释放连接。
  ●在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠执行,不需要等待一个请求结束后再发送下一个请求。
  
图1-15  相关协议和OSI参考模型的关系
  由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种"短连接"。要保持客户端程序处于在线状态,需要不断向服务器发起连接请求。通常的做法是即使不需要获取数据,客户端也每隔一段固定时间向服务器发送一次"保持连接"的请求,服务器在收到该请求后对客户端进行回复,以表明知道客户端"在线"。若服务器长时间未收到客户端的请求,则认为客户端已"下线"。若客户端长时间无法收到服务器的回复,则认为网络已经断开。
  1.HttpWatch的抓包方法
  为了更好地理解HTTP请求和响应,可以使用HttpWatch工具抓取一些数据包。下面介绍HttpWatch的抓包方法。
  (1)安装完HttpWatch后,从菜单栏选择"工具"→"浏览器栏"→HttpWatch Professional,打开HttpWatch,如图1-16所示。
  (2)单击工具栏上的Record按钮,如图1-17所示。
  (3)在浏览器的地址栏中输入http://172.21.200.189/oscommerce/index.php(也可以是任意可访问的地址,这里只是作为示范)。
  
图1-16  HttpWatch的打开方式
  图1-17  单击工具栏上的Record按钮
  (4)按Enter键进行访问,可以发现HttpWatch已经开始抓包了。待页面打开后,单击Stop按钮,如图1-18所示。
  
图1-18  单击Stop按钮
  (5)选择任意一条录制的信息,单击下方的Headers选项卡,查看里面是否有内容。如果有内容,那么说明录制、抓取成功,如图1-19所示。
  
图1-19  录制、抓取成功
  2.HTTP请求
  在HTTP常用的请求类型中,GET请求和POST请求较重要。这两种请求代表了客户端和服务器之间传输数据的典型方式,它们在Web系统的开发和测试中非常重要。无论是哪种请求,都是由头部和正文两部分组成的,但GET请求的正文为空,POST请求的正文为提交给服务器端的数据。
  1)GET请求
  GET请求是指客户端发送一个请求给服务器,目的是从服务器端获取资源。例如,当我们访问一个网站时,输入相应网址并按Enter键后,便发送了一个GET请求给服务器端,请求服务器端返回该网站首页的HTML代码。事实上,通过工具监控,可以了解图1-20所示的请求过程。
  
图1-20  请求过程
  当访问前面提到的http://172.21.200.189/oscommerce/index.php时,发送了多个GET请求,原因在于构成该网站首页的资源除了HTML代码外,还包括很多图片、动画、JavaScript脚本和CSS格式化文件。在HTTP中,一个请求只能对应一个特定的资源,而不能对应整个页面,这一点首先需要了解。
  不妨先使用HttpWatch工具来监控访问该网站首页时的请求过程,监控结果如图1-21所示。切换到Stream选项卡,根据需要,可以单击Export按钮将结果导出。
  
图1-21  监控结果及结果导出操作
  分别单击两个Export按钮,导出两个txt文件--index.php.request和index.php. response。打开txt文件 index.php.request,如图1-22所示。
  
图1-22  打开index.php.request文件
  其中,GET /oscommerce/index.php HTTP/1.1指明了3个关键信息:请求类型为GET,资源URL为/oscommerce/index.php,协议类型和版本为HTTP/1.1。
  标准GET请求包含的关键字段如下所示。
  ●Accept:告诉服务器当前浏览器能接受和处理的介质类型,"*/*"表示可接受所有类型。
  ●Accept-Language:告诉服务器当前浏览器能接受和处理的语言。zh-CN表示浏览器接受中文。还有其他很多能接受和处理的语言,如en-US(英文)。
  ●User-Agent:告诉服务器当前客户端的操作系统和浏览器的内核版本信息。
  ●Accept-Encoding:告诉服务器端当前客户端支持的编码格式,如gzip,这样服务器端可以将HTML、JavaScript或CSS文本型资源压缩后再传递给浏览器,浏览器接收到它们后再解压缩,从而显著减少资源占用的带宽和网络上的传输时间。
  ●Host:表示要访问的服务器端主机名或IP地址。
  ●Connection:告诉服务器浏览器想要使用连接方式,如 Keep-Alive,告诉服务器在完成本次请求的响应后,保持该TCP连接,不释放,以等待本次连接的后续请求。这样可以减少打开及关闭TCP连接的次数,提升处理性能。另外,可选的选项还有Close,它表明在接收响应后将直接关闭连接。
  ●Referer:指定发起该请求的源地址。根据这个值,服务器可以跟踪到来访者的基本信息。例如,在百度首页中搜索51Testing关键字,然后在搜索结果中访问51Testing网站,这时51Testing服务器就可以根据Referer这一值追踪到来访者的地址为http://www.baidu.com/s?wd=51Testing,这样我们就可以知道来访者是从哪个网站访问本网站的。如果是从搜索引擎访问的,那么还可以知道是从哪个搜索引擎访问的,以及搜索的关键字,如图1-23所示。
  
图1-23  得知来访者是从哪个网站访问本网站的
  注意:如果来访者的Referer为空,那么只有两种可能。一种是来访者修改了GET请求,删除了Referer字段的值;另一种就是来访者直接在URL栏输入了该地址,这种用户是忠诚度较高的用户,因为起码他们记得该网站的域名。
  ●Cookie:将客户端的Cookie信息发送给服务器端。关于Cookie的作用及详细用法,将在后续章节中介绍。
  2)POST请求
  POST请求与GET请求最大的区别就在于,GET请求主要负责数据的获取,而POST请求主要负责数据的提交,并且把所有提交的数据放在请求的正文中。
  在访问http://172.21.200.189/oscommerce/index.php网站时,输入用户名和密码并单击"登录"按钮后,就能看到POST的信息,如图1-24所示。
  
图1-24  关于POST的信息
  将Stream选项卡中的内容导出为txt文件并打开,如图1-25所示。
  可能有读者注意到了最后一行内容,显示用户的账号和密码,这说明这个站点的安全性较低。
  下面对比一下百度的登录信息,如图1-26所示。
  从关于 POST 的信息中可以看到,百度已经对登录账号进行了加密。http://172.21. 200.189/oscommerce/index.php网站在这方面存在很大的安全隐患。
  
图1-25  导出的内容
  
图1-26  百度的登录信息
  3.HTTP响应
  HTTP响应与请求类似,同样分为两部分--头部和正文。响应中的头部主要是由服务器端返回给客户端的,用于获取一些服务器端的信息。响应的正文就是请求的各类资源的内容。如果请求的是HTML文件,则正文是HTML文件的源代码;如果请求的是JavaScript文件,则正文是JavaScript代码;如果请求的是图片,则正文就是该图片。
  先来看看响应中头部的内容。同样切换到Stream选项卡,查看窗口右边的内容,这里需要把响应的内容导出为文本文件,如图1-27所示。
 
图1-27  响应文件的内容
  响应文件里面的字段内容和GET请求中的相似,其中一个不同之处需要解释。
  "Transfer-Encoding: chunked"表示在HTTP中使用Content-Length这个头部来告知数据长度。在数据下行的过程中,Content-Length要预先在服务器中缓存所有数据,然后把所有数据一起发给客户端。如果要在产生数据的同时发给客户端,那么Web服务器就要使用"Transfer-Encoding: chunked"这种方式来代替Content-Length。Transfer-Encoding用于指定HTTP的编码方式,chunked编码的基本方法是将大块数据分解成多块小数据,每块都可以指定长度。
  然后,查看HTTP响应的状态码。在响应的第一行中,包含了两个信息:一是HTTP的协议版本号,这里服务器告知浏览器它使用的版本是HTTP 1.1,浏览器可以按照HTTP 1.1的版本规则来对服务器进行解析;二是响应的状态码,这里"200 OK"表示响应完全正常。
  响应的状态码由5类状态码组成,其中1xx(状态码为100~199)属于参考信息,2xx指明成功接受请求并已完成整个处理过程,3xx用于重定向,4xx指出客户端错误,5xx则表示服务器端错误,具体见表1-1~表1-5。
查看《软件测试专项技术--基于Web、移动应用和微信》全部连载内容>>
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号