详细聊聊软件测试中的接口与抓包问题(上)

发表于:2020-12-31 11:07

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

 作者:E安全敏敏小朋友    来源:博客园

  1.软件开发的两种结构
  1.1、CS(Client/Server):客户端----服务器结构
  C/S结构在技术上很成熟,它的主要特点是交互性强、具有安全的存取模式、网络通信量低、响应速度快、利于处理大量数据。
  CS 的优点:
  能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器,所以CS客户端响应速度快。
  操作界面漂亮、形式多样,可以充分满足客户自身的个性化要求。
  C/S结构的管理信息系统具有较强的事务处理能力,能实现复杂的业务流程。
  安全性能可以很容易保证,C/S一般面向相对固定的用户群,程序更加注重流程,它可以对权限进行多层次校验,提供了更安全的存取模式,对信息安全的控制能力很强。一般高度机密的信息系统采用C/S结构适宜。
  需要专门的客户端安装程序,分布功能弱,针对点多面广且不具备网络条件的用户群体,不能够实现快速部署安装和配置。
  兼容性差,对于不同的开发工具,具有较大的局限性。若采用不同工具,需要重新改写程序。
  开发、维护成本较高,需要具有一定专业水准的技术人员才能完成,发生一次升级,则所有客户端的程序都需要改变。
  用户群固定。由于程序需要安装才可使用,因此不适合面向一些不可知的用户
  1.2、BS(Browser/Server):浏览器----服务器结构
  是目前应用系统的发展方向。BS是伴随着Internet技术的兴起,对C/S架构的改进,为了区别于传统的C/S 模式,特意称为B/S模式。在这种结构下,通过W3浏览器来进入工作界面, BS的优缺点:
  优点:
  分布性强,客户端零维护。只要有网络、浏览器,可以随时随地进行查询、浏览等业务处理。
  业务扩展简单方便,通过增加网页即可增加服务器功能。
  维护简单方便,只需要改变网页,即可实现所有用户的同步更新。
  开发简单,共享性强。
  缺点:
  个性化特点明显降低,无法实现具有个性化的功能要求。
  在跨浏览器上,BS架构不尽如人意。
  客户端服务器端的交互是请求-响应模式,通常动态刷新页面,响应速度明显降低(Ajax可以一定程度上解决这个问题)。无法实现分页显示,给数据库访问造成较大的压力。
  在速度和安全性上需要花费巨大的设计成本。
  功能弱化,难以实现传统模式下的特殊功能要求。
  1.3、BS与CS优缺点对比
  (面试题 / 笔试题)
  CS响应速度快,安全性强,用户体验好,一般应用于局域网中,但是开发维护成本高,;BS可以实现跨平台,客户端零维护,但是个性化能力低,响应速度较慢。所以有些单位日常办公应用BS,在实际生产中使用CS结构。
  2、HTTP 协议
  2.1、什么是 http 协议:
  HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
  HTTP是一个客户端和服务器端请求和应答的标准
  客户端是终端用户,服务器端是网站。
  我们在浏览器的地址栏里输入的网站地址叫做URL (Uniform Resource Locator,统一资源定位符)。就像每家每户都有一个门牌地址一样,每个网页也都有一个Internet地址。当你在浏览器的地址框中输入一个URL或是单击一个超级链接时,URL就确定了要浏览的地址。浏览器通过超文本传输协议(HTTP),将Web服务器上站点的网页代码提取出来,并翻译成漂亮的网页。
  HTTP之URL:
  HTTP使用统一资源定位符(Uniform Resource Identifiers, URI)来传输数据和建立连接。URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息
  URL,全称是UniformResourceLocator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。以下面这个URL为例,介绍下普通URL的各部分组成:
  http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
  从上面的URL可以看出,一个完整的URL包括以下几部分:
  ① 协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符
  ② 域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用
  ③ 端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口
  ④ 虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”
  ⑤ 文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名
  ⑥ 锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分
  ⑦ 参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
  2.2、HTTP1.0和HTTP1.1的区别
  一个WEB站点每天可能要接收到上百万的用户请求,为了提高系统的效率,HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。但是,这也造成了一些性能上的缺陷,例如,一个包含有许多图像的网页文件中并没有包含真正的图像数据内容,而只是指明了这些图像的URL地址,当WEB浏览器访问这个网页文件时,浏览器首先要发出针对该网页文件的请求,当浏览器解析WEB服务器返回的该网页文档中的HTML内容时,发现其中的<img>图像标签后,浏览器将根据<img>标签中的src属性所指定的URL地址再次向服务器发出下载图像数据的请求。
  显然,访问一个包含有许多图像的网页文件的整个过程包含了多次请求和响应,每次请求和响应都需要建立一个单独的连接,每次连接只是传输一个文档和图像,上一次和下一次请求完全分离。即使图像文件都很小,但是客户端和服务器端每次建立和关闭连接却是一个相对比较费时的过程,并且会严重影响客户机和服务器的性能。当一个网页文件中包含 Applet,JavaScript文件,CSS文件等内容时,也会出现类似上述的情况。
  为了克服HTTP 1.0的这个缺陷,HTTP 1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间。基于HTTP 1.1协议的客户机与服务器的信息交换过程。
  可见,HTTP 1.1在继承了HTTP 1.0优点的基础上,也克服了HTTP 1.0的性能问题。不仅如此,HTTP 1.1 还通过增加更多的请求头和响应头来改进和扩充HTTP 1.0 的功能。例如,由于 HTTP 1.0不支持Host请求头字段,WEB浏览器无法使用主机头名来明确表示要访问服务器上的哪个WEB站点,这样就无法使用WEB服务器在同一个IP地址和端口号上配置多个虚拟WEB站点。在HTTP 1.1中增加Host请求头字段后,WEB浏览器可以使用主机头名来明确表示要访问服务器上的哪个WEB站点,这才实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点。HTTP 1.1 的持续连接,也需要增加新的请求头来帮助实现,例如,Connection 请求头的值为Keep-Alive 时,客户端通知服务器返回本次请求结果后保持连接;Connection 请求头的值为close 时,客户端通知服务器返回本次请求结果后关闭连接。 HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。
  2.3、http 请求
  客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。
  2.4、http 请求方式
  GET / POST 请求的区别:(面试题)
  ① Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。
  ② Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。
  请求方式:
  HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
  HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
  GET 请求指定的页面信息,并返回实体主体。
  HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
  POST     向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
  PUT 从客户端向服务器传送的数据取代指定的文档的内容。
  DELETE 请求服务器删除指定的页面。
  CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
  OPTIONS 允许客户端查看服务器的性能。
  TRACE 回显服务器收到的请求,主要用于测试或诊断。
  2.5、常见的 http 请求:GET 和 POST
  ① GET 请求:
  ② POST 请求
  http://127.0.0.1:1080/WebTours/index.htm
  区分那些是 GET 请求,那些是 POST 请求?
  (1)GET:在浏览器直接输入URL、<a href=""> 、<form method="get" >
  POST: <form method="post" >
  (2)GET请求数据位于请求行中 ,POST请求数据位于请求体中。
  GET /day4/form.html?username=zhangsan HTTP/1.1
  POST /day4/form.html HTTP/1.1
  ...
  username=lisi
  (3)GET请求数据在URL上显示,所以有长度限制,通常是1kb =1024字节。
  (4)POST的安全性要比GET的安全性高。比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存;(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了。
  2.6、GET 和 POST 的区别:
  1、GET使用URL或Cookie传参。而POST将数据放在BODY中。
  2、GET的URL会有长度上的限制,2kb,则POST的数据则可以非常大。
  3、POST比GET安全,因为数据在地址栏上不可见。
  4、一般get请求用来获取数据,post请求用来发送数据。
  2.7、http请求—消息头Request
  客户端发送一个HTTP请求到服务器的请求消息包括以下格式:
  请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。
  请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本。
  第一部分:请求行,第一行明了是post请求,以及http1.1版本。
  第二部分:请求头部,第二行至第六行。
  第三部分:空行,第七行的空行。
  第四部分:请求数据,第八行。
Accept: text/html,image/*      -- 浏览器接受的数据类型
Accept-Charset: ISO-8859-1     -- 浏览器接受的编码格式
Accept-Encoding: gzip,compress  --浏览器接受的数据压缩格式
Accept-Language: en-us,zh-     --浏览器接受的语言
Host: www.it315.org:80          --(必须的)当前请求访问的目标地址(主机:端口)
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT  --浏览器最后的缓存时间
Referer: http://www.it315.org/index.jsp      -- 当前请求来自于哪里
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)  --浏览器类型
Cookie:name=eric                     -- 浏览器保存的cookie信息
Connection: close/Keep-Alive            -- 浏览器跟服务器连接状态。close: 连接关闭
keep-alive:保存连接。
Date: Tue, 11 Jul 2000 18:23:51 GMT      -- 请求发出的时间
  2.8、http响应
  服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。
  HTTP响应也由四个部分组成:状态行、消息报头、空行和响应正文。
  第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
  第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)。
  第二部分:消息报头,用来说明客户端要使用的一些附加信息。
  第二行和第三行为消息报头。
  Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8。
  第三部分:空行,消息报头后面的空行是必须的。
  第四部分:响应正文,服务器返回给客户端的文本信息。
  空行后面的html部分为响应正文。
  必须记忆的:
200 - 请求成功,已经正常处理完毕
301 - 请求永久重定向,转移到其它URL
302 - 请求临时重定向
304 - 请求被重定向到客户端本地缓存
400 - 客户端请求存在语法错误
401 - 客户端请求没有经过授权
403 - 客户端的请求被服务器拒绝,一般为客户端没有访问权限
404 - 客户端请求的URL在服务端不存在
500 - 服务端永久错误
  2.9、http响应—常见响应头
Location: http://www.it315.org/index.jsp   -表示重定向的地址,该头和302的状态码一起使用
Server:apache tomcat                 ---表示服务器的类型
Content-Encoding: gzip                 -- 表示服务器发送给浏览器的数据压缩类型
Content-Length: 80                    --表示服务器发送给浏览器的数据长度
Content-Language: zh-cn               --表示服务器支持的语言
Content-Type: text/html; charset=GB2312   --表示服务器发送给浏览器的数据类型及内容编码
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT --表示服务器资源的最后修改时间
Refresh: 1;url=http://www.it315.org        --表示定时刷新
Content-Disposition: attachment; filename=aaa.zip --表示告诉浏览器以下载方式打开资源(下载文件时用到)
Transfer-Encoding: chunked
Set-Cookie:SS=Q0=5Lb_nQ; path=/search   --表示服务器发送给浏览器的cookie信息(会话管理用到)
Expires: -1                           --表示通知浏览器不进行缓存
Cache-Control: no-cache
Pragma: no-cache
Connection: close/Keep-Alive           --表示服务器和浏览器的连接状态。close:关闭连接 keep-alive:保存连接
  2.10、HTTP之状态码
  状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
  1xx:指示信息--表示请求已接收,继续处理
  2xx:成功--表示请求已被成功接收、理解、接受
  3xx:重定向--要完成请求必须进行更进一步的操作
  4xx:客户端错误--请求有语法错误或请求无法实现
  5xx:服务器端错误--服务器未能实现合法的请求
  常见状态码:
200 OK                        //客户端请求成功
400 Bad Request               //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized              //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
403 Forbidden                 //服务器收到请求,但是拒绝提供服务
404 Not Found                 //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error     //服务器发生不可预期的错误
503 Server Unavailable        //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号