性能测试->URL&HTTP协议

URL&HTTP协议详解:
·协议:protocol、就是通信双方就数据的组织格式、规程、含义等所进行的约定。
一般来说,我们在性能测试过程中,就是通过模拟真实用户在协议层所发送的数据包来达到模拟向服务器发起请求的效果。
从TCP/IP模型上来说,理论上我们可以在四层中的任意一层进行模拟,但是一般我们都是都是通过模拟应用层的协议包来实现虚拟用户(发送请求)。


·URL:统一资源定位符,是通信访问的一个基础。
一般来说,一个URL包含以下五个部分:
协议、域名、端口、路径和URL地址参数。
示例:https://ke.qq.com/course/315793?taid=4457046477164945
·协议protocol:表示通信双方所使用的通信协议,一般来说是URL中"://"之前的部分。
常见的应用层的协议有:
http
https http+ssl
ssh
ftp
smtp
pop3

oracle
mysql
ms sql

·域名domain:是指要访问的服务器的访问地址。
域名是跟在"://"之后。
域名可以是真实的机器名、IP地址、域名(由域管理器来指定,是虚拟的。)
比如说:
www.baidu.com
ke.qq.com
mail.qq.com
14.215.177.38

·端口port:是跟在域名之后,通过冒号进行拼接。格式为:domain:port。
·端口是由服务器自身来配置指定的,理论范围是0~65535.
·端口一旦指定,则用户访问该服务器上的所有应用时,都需要添加端口,服务器就可以对端口进行侦听,从而达到实时响应客户端请求的效果。
·如果服务器所使用的端口是其所使用的协议的默认通信端口,则客户端在访问服务器时,可以省略端口。
常见的协议及其默认通信端口关系如下:
http 80
https 443 or 8443
ftp 21
ssh 22
smtp 25
pop3 110

oracle 1521
mysql 3306
ms sql 1433

PS:端口是由服务器决定,而不是由客户端决定,客户端仅仅是通过端口来访问服务器。

·path:路径,是指跟在端口之后的访问路径。
比如说:
/course/315793?taid=4457046477164945
一般来说,path是和业务有关的,可能是访问的静态资源的路径(是在容器服务器下的路径)。也有可能是一些动态方法服务的路径。

PS:服务器的容器根地址是可以指定的(配置)。


·URL地址参数parameter:本身是属于path的一部分,是用来进行传参的。
通常来说是通过问号连接在path之后。
格式为键值对的格式,多个键值对之间使用“&”进行连接。


·http协议:http是指HypeText Transfer Protocol,超文本传输控制协议。
是web应用中最常用的通信协议。
http协议的特点有:
·http协议是一种基于request(请求)和response(响应)的协议。
这就意味着http协议适用于所有的C/S架构的系统。

·http协议是一种简单、灵活的协议。

·http协议是一种快速、面向无连接的协议。
http1.0之前,默认是无连接(短连接)的。

http1.1开始,默认是长连接的。
是通过请求头来实现标识。
Conncetion:keep-alive。
http协议是基于tcp协议的。
·短连接:是指一个tcp连接之上只会建立一个http连接。http连接关闭,则下层的tcp连接跟着关闭。
·长连接:是指一个tcp连接之上可以重复建立多个http连接。
多个http连接之间还是串行关系。


·http协议是一种无状态的协议。
后来为了实现状态的记录,引入了大量的技术,其中典型的就是:
session和cookie。


·http协议的具体构成详解:
http协议是分为两块:http request和http response

·抓包:抓包工具很多,如果要做接口or性能测试的脚本,则建议在使用抓包工具时,
除了看工具所提供的解析结果,也最好查看source或者raw数据。

·http request:http请求。
http请求通常包含三个部分:request line、request header、request body。

·request line:请求行,通常来说就是指请求数据包中的第一行。
按照空格进行分隔,包含下列信息:
request method、request path、protocol/version
示例:
POST /phpwind/login.php HTTP/1.1

·request method:请求方法。
·http请求是一定会有请求方法的,如果不指定,则默认为get。
·常见的请求方法有:get、post、put、patch、delete、options、header、trace等等。
·具体使用何种请求方法,由应用程序决定,以接口文档or实际抓包为准。
PS:
get和post方法的区别。
·get和post都是请求方法。
·get和post都是可以携带请求参数的。
·默认情况下:
get方法所携带的参数都是位于URL地址参数部分的。
通过url地址参数来传递的参数,服务器也只能通过get的方式进行处理,即使客户端使用的是非get请求方法。

post方法所携带的参数默认都是位于request body部分的。

·在浏览器层面:通过get方法获取的响应是默认缓存在客户端的,通过post方法获取的响应是不会在客户端缓存的。(安全性)

在浏览器层面,url的长度是有限制的,所以get方法不能用于字符数量很大的参数的传递。

·request path:请求路径,即URL中的path部分。

·protocol/version:协议,即通信所使用的协议及版本。

·request header:请求头,是指从请求数据包中的第二行开始,到第一个空行结束的部分。
·请求头是客户端用来传递控制、交互信息的。通常和业务无关。
·请求头是键值对应,格式为:“请求头名:请求头值”。
·请求头的名称由协议规定的,不同的请求头具有不同的意义。
·User-Agent:用来告知服务器,客户端的配置信息,通常又作为服务器识别客户端请求的来源标识。
如果牵涉到多个请求之间的session&cookie处理,则该请求头必加,而且建议是全局的。

·cookie、token、author:一般来说,这样的请求头都是牵涉到状态信息的。
通常来说,很多工具本身都是支持cookie的管理和维护的,不需要进行手动添加。
但是token和author头很多时候都需要手动关联实现。

·Content-Type:内容类型,是客户端用来告知服务器,所发送的请求主体的数据组织格式的。如果有请求主体,则一定要指定该信息头。
PS:请求主体,直接从source或者raw模式下复制,而不要从默认的解析模式获取。
常见的Content-Type有:
·application/x-www-form-urlencoded:默认的键值对表单格式。
·application/json: json格式数据。
·multipart/form-data; boundary=---------------------------7e41c42050692
混合表单格式,表示要同时传递不同类型的数据,数据之间通过分隔符boundary进行分隔。
boundary的值比数据实际的分隔符是要少两个下划线的。
如果工具支持multipart/form-data,boundary一般是自动生成,不需要指定。但是如果手动封包,则boundary必须和实际数据包中的分隔符一致。

PS:Content-Type具体的值以实际抓包或者接口文档为准。包括请求主体的实际的数据组织格式。

·request body:第一个空行之后的所有内容。
是客户端发送给服务器的数据。
PS:
·只要有body,则一定要指定信息头:Content-Type
·body的数据组织格式,由接口文档or实际抓包为准,不要看抓包工具解析之后,要看原始的数据,即source或者raw模式下的数据。


·http response:http响应,主要是用于关联、检查业务请求是否成功的。
http响应也分为三个部分:response line、response header、response body

·response line:响应行,即响应数据包中的第一行。
包含下列信息:
protocol/version、response code、response message
示例:
HTTP/1.1 200 OK
·response code:响应代码,又叫状态码,是服务器用来告知客户端,服务器对于请求的处理状态。
响应代码仅仅表示服务器在通信逻辑层面对于请求的处理结果,和业务无直接关系。
响应代码通常都是三位长度的数字,以首位数字作为分类,响应代码可以分为以下五大类:
·1xx:表示连接建立过程中的传输、通信信息。
·2xx:表示服务器处理成功。
典型的就是200.

·3xx:表示重定向。其中301-303,307是指url的重定向,而304-306是静态资源的重定向。

PS:1xx、2xx、3xx都表示通信层面的状态是成功的。

·4xx:表示客户端错误。
典型:403 权限错误
404 资源未找到
PS:使用真实客户端进行操作时,如果出现4xx错误,则可以提交bug。
如果使用封包工具(接口、性能)进行测试,出现4xx,则有可能是自身使用不当导致。
·5xx:表示服务器错误。
PS:使用真实客户端进行操作时,如果出现5xx错误,则可以提交bug。
如果使用封包工具(接口、性能)进行测试,出现5xx,则有可能是自身使用不当导致。


PS:4xx、5xx出现,则表示通信层面的状态是错误的,那么业务一定失败。

PS:基本上,所有的封包工具,都会自动完成通信逻辑层面的检测。


·response message:响应信息,是用来描述响应代码的,没有实际意义。


·response header:同request header,区别只是服务器反馈给客户端的交互信息。
有一些状态信息,也会通过响应信息头返回。


·response body:响应主体,是应用程序对请求的业务处理结果。
一般来说,我们关联数据,检测请求是否成功,都和响应主体有关。

原文地址:https://www.cnblogs.com/wendy-0901/p/13048188.html