简介服务与服务之间传递数据包,往往会因为不同的应用场景,使用不同的通讯协议进行传递。比如网站的访问,常常会使用 HTTP 协议进行传递,文件传输使用 FTP,邮件传递使用 SMTP。上述的三种类型的协议都处于网络模型中的应用层。除了应用层的常用协议之外,对于传输层的 TCP、UDP 协议,以及 Restful 架构风格、RPC 协议等等基础网络知识要有一定的了解和认知。
网络协议介绍在了解具体的协议之前,需要先了解 OSI 七层模型、TCP/IP 四层模型、五层体系结构这三种不同的网络模型。如图是网络协议模型对比图。
OSI 参考模型是一个在制定协调进程间通信标准时所使用的概念性框架,它并不是一个标准。TCP/IP 四层模型是网际网络的基础通信架构。常视为是简化的七层 OSI 模型。五层协议是 OSI 和 TCP/IP 的综合,实际应用还是 TCP/IP 的四层结构。TCP/IP 协议栈是对应 TCP/IP 四层模型所使用的具体的网络协议。TCP 协议TCP 协议是在传输层中,一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 协议的工作方式为在建立连接的时候需要进行“三次握手”,终止连接时需要进行“四次挥手”。“三次握手”和“四次挥手”是 TCP 协议的重要知识点,在后面的章节会通过实战和理论结合具体介绍。
适用场景TCP 协议的面向连接、错误重传、拥塞控制等特性,适用于可靠性高的场景,比如涉及用户信息的数据传输。
UDP 协议UDP 协议一旦把应用程序发给网络层的数据发送出去,就不保留数据备份。它仅在 IP 数据包的头部加入复用和数据校验字段。所以 UDP 常常被认为是不可靠的数据包协议。
适用场景UDP 协议的不需要提前建立连接、实现简单的特性,非常适用于实时性高的场景,比如流媒体、在线游戏等。
RPC 协议RPC 的英文为 Remote Procedure Call ,它很好的诠释了 RPC 协议的概念,即为以本地代码调用的方式实现远程执行,RPC 主要用于公司内部的服务调用。RPC 接口的优点在于传输效率更高、性能损耗更低、自带负载均衡策略、更好的服务治理能力。
常见的 RPC 协议目前在行业内常用的 RPC 协议主要如下:
Dubbo:Java 上的高性能 RPC 协议,Apache 开源项目,由阿里捐赠 底层应用层协议支持 Dubbo 缺省 TCP 协议、HTTP、Hessian、Thrift、gRPC 等。gRPC:高性能通用 RPC 框架,基于 Protocol Buffers。PB(Protocol Buffers):是一个语言中立、平台中立的数据序列化框架。Google 开源项目。Thrift:与 gRPC 类似的多语言 RPC 框架,Apache 开源项目。JSON-RPC:A light weight remote procedure call protocol. It is designed to be simple。HTTP 协议HTTP 协议是接口测试中最常见的协议,是用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是万维网的数据通信的基础。客户端向服务端发送 HTTP 请求,服务端则会在响应中返回所请求的数据。在测试过程中,常常需要校验请求和响应结果,所以了解 HTTP 协议,对于接口测试来说,是重中之重。
请求请求行:method url protocol请求方法:GET、POST、PUT、DELETE、HEAD请求头: Host Cookie User-Agent请求参数 query请求体:JSON XML FORM响应:响应状态行响应头响应体URI 和 URLURI,统一资源标识符,用来唯一的标识一个资源。URL,统一资源定位符,它是一种具体的 URIURL 结构:https://www.baidu.com/s?wd=霍格沃兹&rsv_spt=1协议:http域名:www.baidu.com端口:跟在域名后面,域名和端口之间使用“:”作为分隔符,非必须,如果省略端口部分将采用默认端口路径:/s请求参数:wd=霍格沃兹&rsv_spt=**1HTTP 请求报文代码语言:bash复制> GET /uploads/user/avatar/31438/8216a3.jpg HTTP/1.1
> Host: ceshiren.com
> Accept-Encoding: deflate, gzip
> Connection: keep-alive
> Pragma: no-cache
> Cache-Control: no-cache
> User-Agent: Mozilla/5.0
(Macintosh; Intel Mac OS X 10_15_0)
AppleWebKit/537.36
(KHTML, like Gecko)
Chrome/80.0.3987.116 Safari/537.36
> Accept: image/webp,image/apng,image/*,*/*;q=0.8
> Referer: https://ceshiren.com/
> Accept-Language: en,zh-CN;q=0.9,zh;q=0.8
> Cookie: user_id=xx;
_homeland_session=xx;
>HTTP 响应报文代码语言:bash复制< HTTP/1.1 200 OK
< Server: nginx/1.10.2
< Date: Thu, 12 Mar 2020 09:13:44 GMT
< Content-Type: image/png
< Content-Length: 11390
< Connection: keep-aliveHTTP 响应状态码1xx 临时响应,表示通知信息,请求收到了或正在进行处理2xx 表示成功,接受或知道了200 成功3xx 表示重定向,要完成请求还必须才去进一步的行动301 永久移动302 临时移动4xx 表示客户端请求错误403 未授权404 未找到5xx 表示服务端错误500 服务器内部错误503 服务不可用** **RESTful 架构HTTP 基本行为代表意义起源Roy Thomas Fielding 博士于 2000 年在他的博士论文中提出来的一种万维网软件架构风格。其目的是为了便于不同的软件在网络中传递信息。RESTful 是基于 HTTP 协议之上制定的一种资源请求、操作的风格,用一句话来概括就是使用 URL 去定位资源,使用 HTTP 动词描述操作。
HTTP 请求方法在 RESTful API 中的典型应用:
方法
意义
GET
获取资源
POST
新增或者更新
PUT
更新资源
DELETE
删除资源
注意: 不同公司在使用 RESTful 架构风格的时候存在部分差别。
get 与 post 区别在日常的工作当中,HTTP 请求中使用最多的就是 GET 和 POST 这两种请求方式.那么掌握这两种请求方式的原理,以及两种请求方式的异同,也是之后做接口测试一个重要基础。
请求方法不同。POST 可以附加 body,可以支持 Form、JSON、XML、Binary 等各种数据格式。从行业通用规范的角度来说,如果对数据库不会产生数据变化的,比如查询操作,建议使用 GET 请求,数据的写入与状态建议用 POST 请求。总结网络模型常见接口协议HTTP 协议RESTful 架构