基础知识-URL&HTTP协议
URL:统一资源定位符
URL一般包含五部分:协议、域名、端口、路径、URL地址参数
例如:http://sfz.uzuzuz.com/?region=110101&birthday=19900307&sex=2&num=5&r=9
注释:
协议:protocol常见的通信协议有:http,https :即http+ssl,ftp,ssh,smtp,pop3,oracle,mysql,sql server
域名:domain就是服务器所在的地址,可以是虚拟的域名、机器名、IP地址。 www.baidu.com,172.20.9.63
端口:port一般格式:domain:port,端口是由服务器来配置决定的,用于监听客户端的请求。如果服务器所使用的端口是通信协议的默认通信端口的话,则用户(client)在访问服务器时是可以省略不写的。常见的协议及其默认通信端口的关系如下:
http->80;https->443o/8443;ftp->21;ssh->22;smtp->25;pop3->110;oracle->1521;mysql->3306;sql server->1433
路径:path,是指用户要访问的服务器资源/请求的操作的路径。一般在接口测试文档中,给出的只有path,不会有域名:端口,通常,path承载的就是接口的处理逻辑。
URL地址参数:属于可选部分,通常是以问号作为连接符拼接在path之后。参数值采取的是键值对应的格式,多个键值之间使用&作为连接符。
//ssl(Secure Sockets Layer):安全套接层协议层,它是基于 WEB 应用的安全协议。 SSL 协议指定了一种在应用程序协议(如 HTTP 、 Telenet 、 NMTP 和 FTP 等)和 TCP/IP 协议之间提供数据安全性分层的机制,它为 TCP/IP 连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证。
SSL协议提供的服务主要有:
1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程中不被改变。
HTTP:超文本传输协议,是目前主流的接口通信协议
http协议是一种基于request(请求)和response(响应)的协议,适用于所有C/S架构的产品。
http协议是一种简单、快速、灵活的通信协议。
http协议是一种无连接的协议。
http1.0及之前,http协议是一种短连接的协议。短连接是指一个TCP连接上只能承载完成一个http连接。
http1.1之后,http协议变成了一种长连接的协议。是指一个tcp连接上可以建立、完成多个http连接。实现多个http资源的传输共享
特征:请求头中会包含字段:Connection:keep-alive
http协议是一种无状态的协议。。
http协议是由两个部分构成:http request和http response。
http request:http请求,接口测试就是去模拟请求的实现。
一个http请求包含以下几个部分:request line、request header、request body。
request line:请求行,即请求包中的第一行信息。通常包含以下内容:
request method、request path、protocol/version
request method:请求方法,所有的http请求都必须指定请求方法,如果没有指定,则表示使用默认的请求方法get。
常用的请求方法有:get、post、put、patch、delete、options、head、trace。
request path:请求路径,即URL中的path部分,通常是包含url地址参数的。
protocol/version:协议版本
request header:请求头,是指从请求包的第二行开始,到第一个空行截止的部分。
请求头都是键值对应的。格式为:请求头名称:请求头的值。
标准的请求头都是用来携带客户端和服务器通信所需要的交互和控制信息,一般来说和业务无关。
常用的信息头:
User-Agent:用来告知服务器,客户端的配置信息。
一般来说,该信息头和session、cookie的维持有关系,服务器也一般是通过该信息头来进行一些客户端的适配。
Accept-Encoding:客户端是否支持解压缩。
Content-Type:如果存在request body,那么该信息头是必加的。该信息头的作用是用来告知服务器,客户端所发送的body 数据所采用的数据格式。要求和实际格式匹配。
cookie:cookie本身也是包含在信息头之中。
request body:请求主体,是指请求包中从第一个空行开始到最后的数据。
//如果请求主体有内容,则一定要加信息头:Content-Type,值和实际的数据格式保持匹配。
http response:http响应,即服务器对于请求的处理结果。通常来说也是包含三个部分:response line、response header、response body
response line:响应行,是指响应的第一行内容。通常包含以下信息:
protocol/version、response code、response message
response code:响应代码,即状态码,是服务器用来告知客户端,服务器对于请求的处理状态。通常来说,状态码为三位长度的数字,根据首位数字的不同,大致可以分为以下几类:
1xx:表示连接建立过程中的传输、交互信息。
2xx:表示处理成功,例如200.
3xx:表示重定向,
通常来说,1xx、2xx、3xx都表示成功,仅仅表示服务器是OK的,但是业务不一定OK。
4xx:表示客户端错误。
403:权限问题
404:资源未找到,path有误
5xx:表示服务器错误。例如500是服务器异常。
4xx和5xx都表示错误,逻辑错误了。
//在接口测试过程中,出现4xx和5xx,在排除服务器问题之后,基本上都是因为脚本所封装的请求数据有误导致。
response message:响应信息,是服务器对于响应代码的简要描述。
response header:响应头,是指从响应包的第二行开始,到第一个空行截止的部分。
响应头和请求头类似,包含的是服务器返回给客户端的交互、控制信息。
response body:响应主体,即服务器对于请求的处理结果。
通常来说,响应主体就是我们做接口自动化时,需要进行判断(断言)的,用来判断脚本是否成功。
get和post的比较:
get和post都是请求方法。
get方法传递参数时,参数是以URL地址参数的方式存在的。
post方法传递参数时,标准做法是以body的方式来传递,但是本身也可以支持url或者url地址参数方式。
get方法获取的资源,在客户端是可以缓存的。
post方法获取的资源,在客户端是不会缓存的。
因为浏览器的限制,url地址长度是有最大值限制,所以get方法往往没有办法传送大字节的数据,而post方法一般使用body实现值的传递,所以可以传递大字节的数据。协议层面主要是因为url地址参数的组装方式决定了:post方法能够传递更多类型的数据。
//在实现接口测试的时候,具体使用哪个方法,是以接口文档或者实际业务抓包为准。
总结&补充:
HTTP请求方式:
GET:该方式只能传少量数据(因为会将请求参数显示在URL中,地址有限,不安全)
请求数据会以?的形式隔开并拼接在请求头中,不安全,没有请求实体部分。
上述内容总结来自土匪老师