HTTP和HTTPS的区别
Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。
二者之间存在如下不同:
1、端口不同:Http的默认端口是80,Https则是443;
2、资源消耗:和Http通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
3、开销:Https需要申请证书,而证书一般需要向认证机构购买;
4、http连接很简单,无状态的,而https是由SSL+HTTP协议构建的可进行加密传输、身份验证的网络协议,比http安全。
URL:统一资源定位符
通常来说是http协议用来识别对方的一个重要方式。通常一个URL包含以下五个部分:
- 协议、域名、端口、地址、URL地址参数。
协议:protocol,就是指冒号之前的部分。
常见的应用层协议有:
·http
·https: http+ssl(tls)
·ftp:
·SMTP:
·pop3:
·ssh:
域名:domain,域名,是指要访问的接口服务器的标识符,可以是机器名、ip地址、域名(域名是由域管理器进行管理维护,一般是虚拟的,在域中具有唯一性)。
端口:port,是跟在域名之后,格式为: domain:port
端口是由服务器自身来指定,可以配置。
如果服务器所设置的端口是其应用通信所采用的协议的默认通信端口,则用户在进行访问时,可以忽略端口。
常见的应用协议及其默认通信端口对应关系如下:
- http 80
- https 443 or 8443
- ftp 21
- ssh 22
- smtp 25
- pop3 110
路径:path,是要访问的资源、请求在服务器上的相对地址。
相对地址是相对于服务器的容器(DocumentRoot)地址而言。
URL地址参数:是跟在path之后,使用问号作为连接符,用来向服务器传递数据的(一般是get方法)。
- url地址参数本身也是可以算在path中的。
示例:/index.html#cid=3098052&term_id=103219423&taid=10292914897765828&from=41
- 参数采用键值对方式,然后不同的参数之间使用&作为连接符。
http协议:
http协议是一个分为http request(http请求)和http response(http响应)两部分的协议。
http request:http请求,通常来说分为三个部分:
request line、request headers、request body
- request line:请求行,是指请求数据包中的第一行内容,包含以下信息:
request method、request path、protocol/version
示例:
GET /phpwind/ HTTP/1.1
- request method:请求方法。所有的http请求都必须指定请求方法,如果没有指定,则默认将使用get方法。
常见的http请求的方法有:
get、post、put、patch、delete。
对于请求方法,不是由我们测试决定,而是由接口(开发)来决定。
get和post的联系和区别:
-
- get和post都是请求方法。
-
- get和post都可以向服务器发送数据。
一般来说,get方法所发送的数据是以URL地址参数(parameter)方式存在。
post方法所发送的数据是以request body(data)的方式实现。
因为浏览器对于URL的限制(包括长度和字符),如果我们要通过浏览器来发送请求的话,不适合通过get方 法来传递长度很长、特殊字符很多的数据,而是建议用post方法。
-
- post方法比get方法更加安全:
-
- post方法获取的响应在客户端是不可缓存
- request path:就是URL中的path及URL地址参数。
-
- protocol/version:协议和版本。
- request headers:是指请求数据包中从第二行开始到第一个空行截止的部分。
请求头是客户端用来和服务器进行交互、信息控制的,通常来说和业务本身无关。
请求头是键值对应。
请求头的名称一般来说是由协议指定,不同的请求头具有不同的特殊的作用。
通常意义上来说,我们在实现接口测试的过程中,需要重点关注的头有以下:
- User-Agent:该信息头是用来告知服务器,客户端配置信息。通常和cookie、session有关。
该信息头属于必加信息头,然后绝大多数请求下,只需要保证统一即可,值本身无所谓。
- Content-Type:只有当request body中存在数据时,需要指定该信息头。
该信息头是客户端用来告知服务器,body中的数据(Content)的数据组织格式。
PS:该信息头要求和实际body的数据组织格式保持一致,然后数据组织格式是由接口(开发)决定。
对此,在抓包时,我们一定要切换到source或者raw模式去查看原始的数据组织格式,不要去被抓包工具解析之后的格式所迷惑。
- cookie:一般不需要单独处理。jmeter中提供了组件:http cookie管理器自动管理。
其他的权限相关的头:token、csrftoken、author等,一般来说都是需要做关联处理。
PS:在模拟接口测试时,以上信息头都处理到位的情况下,请求还是无法成功,可以将抓包的其它信息头逐步添加。
- request body:是指请求数据包中从第一个空行开始到最后的内容。
http请求数据包中,header和body之间是由一个空行分隔。
一般来说,应用层的接口测试工具都会帮我们自动处理。但是一旦我们通过tcp层去模拟发送http请求,则一定要注意空行。
一旦body中有内容,则100%需要去指定信息头Content-Type。body的数据组织格式以接口和抓包(source、raw、stream)为准
http response:http响应,也是由三个部分构成:
response line、response header、response body
- response line:响应行,是指响应数据包中的第一行内容。
示例:
HTTP/1.1 200 OK
包含以下信息:
protocol/version、response code、response message
- response code:响应代码,又叫状态码(Status),是服务器用来告知客户端,服务器对于请求的处理状态。
该状态仅仅表示通信层面上服务器的处理状态,而不代表业务的处理状态。
状态码是三位长度的数字,根据首位数字的不同,可以分为五类:
- 1xx:表示连接建立过程中的交互信息
- 2xx:表示通信成功。
- 3xx:表示重定向。302(重定向),304(访问缓存)
- 4xx:表示客户端错误。404(请求路径没有对应的资源) 、405(请求方式没有对应的doXX方法)
- 5xx:表示服务器错误。

PS:一般来说,所有的接口测试工具,都是自动对状态码做检测,并且作为请求是否成功的第一判断要素。
一般来说,状态码为1xx、2xx、3xx都表示成功,4xx和5xx表示失败。
在调试阶段,4xx、5xx错误一旦出现,99.9%的情况是我们自身的脚本封装有误导致。
- response message:响应信息,是用来描述响应代码,没有任何实际意义。
- response headers:响应头,参考请求头。有的时候,响应头中可能会包含一些权限相关信息(非cookie),一般需要通过关联去获取。
- response body:响应主体,是指响应数据包中第一个空行之后的所有内容。
一般来说,响应主体就是服务器对于请求的处理结果。通常需要关联的数据可能会存在于响应主体或者响应头中。我们也可以通过对响应主体进行检测,来判断业务是否正确。
每天学习一点
浙公网安备 33010602011771号