做一个接口测试人员,最常接触的就是http/https协议,今天主要是想写一下我对http/https协议的理解。(先来点干货)http/https协议是应用层的协议,承载于TCP之上,是用来连接client和server。http协议的操作流程是:client通过TCP握手协议和server建立连接,向server端发送请求(Request),server端接收到请求之后,进行处理然后将结果(Response)返回给client。
当我们通过抓包工具fiddler抓到请求连接(如图),我们要获取其中的参数,然后通过模拟传参,获得服务器的返回值,从而进行测试。
其中对于我们来说比较看重要的是headers里面的User-Agent和Cookies;客户端通常会把设备信息存在User-Agent,供Server区分Client的类型。当我们在写测试脚本的时候,可以通过User-Agent来模拟APP端还是PC端发起Request。Cookies是存储在client的文本文件或者在内存中的数据,是存放在client中,是client访问server的身份证。
当我们在模拟网站的接口请求时,往往先进行登录操作,我们先通过执行登录接口,然后再将接口中的Cookies保留,再进行网站的其他操作。(干货重点)同cookies相似的还有一个叫session,两者的区别在于cookies是存储在Client,而session存储在Server。
这段代码就是我们定义一个自动存储cookies的对象,然后通过调用登录接口,然后就可以自动保存cookies了。
Client对Server进行数据传输,发起的请求常用的有GET和POST两者。Get请求,一般是可以通过浏览器打开的URL连接,参数都是加在?后面通过&连接。Post请求分为header和body,参数写在body里面。这两者的区别是,Get参数放在header的URL里面,URL有大小限制连接可能被截取;Post参数在body里面,body里面没有限制大小,适用于大量数据参数。Post的安全性要比Get高,Get的请求参数可以被用户看到。
另外来说一下https协议,https协议是基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护,相当于http通过SSL加密后通过TCP进行传输。http和https的区别是,http是不加密的,https是加密的,安全性上来说https更高。但HTTPS证书需要购买申请,同时https在耗时上更久,加载时间更久,最好两者结合使用。
在进行模拟接口请求时,我们偶尔会遇到服务端返回签名错误的提示,签名是用来确保传输数据的安全,服务端会有一个签名校验的过程,就是通过密钥和参数按照特定规则进行MD5加密,然后进行校验,判断数据是否是平台内部的数据传输,故在模拟时要和开发同步签名的规则。
另外关于安全性,我们常常听说有公钥和私钥。公钥和私钥到底是用来干嘛的呢?公钥是用来加密的,一般在客户端,客户端通过公钥加密传到服务器,服务器只能通过特定的私钥进行解析,才能获取客户端传过来的内容。如何确保我们的证书没有被劫持过,所以就有了根证书。用户通过https请求时,服务器会把含有公钥的证书发给客户端,客户端会通过系统的根证书校验服务器证书是否伪造,验证通过才能继续请求。Fiddler等代理抓https请求就是基于这个原理,用户安装fiddler的根证书,fiddler所有的请求,用自己签名后的数据返回给客户端。
目前我对接触到的http/https协议也是略微皮毛,只是在工作中经历了http到https的转变,从模拟APP接口请求到WEB接口请求,从Python的request接触到session。对于我们来说除了模拟了接口请求,更多的是要对于接口返回的response进行数据校验,这一点后期详解。虽然作为一个测试我们可能不像开发一样很深入的理解协议,但是我们依旧需要了解基础的内容,希望大家都能够努力加油吧!
网友评论