学API接口测试,致富植发(一)HTTP协议 - Go语言中文社区

学API接口测试,致富植发(一)HTTP协议


一、接口

API(Application Programming Interface)用程序编程接口,简称API / 接口。

举例:Windows是一个封装好的系统,按理用户无权操作。但它提供了一整套接口,我们可以调用接口对Windows系统进行一系列的操作。类库就是提供的一整套接口,类下的每个函数都是一个接口。实现函数供他人使用,是提供接口;使用他人提供的函数,是调用接口。

接口的定义big big big,但此篇接口测试中的接口,特指基于网络协议的接口(客户端→服务端→客户端),而非编程语言对应库中的编程接口。

 

二、接口测试

模拟HTTP客户端(PC端浏览器 / 手机端APP)向HTTP服务端(Web服务器)发送报文请求,服务器接收请求报文后对相应的报文做处理,并向客户端返回应答,然后客户端接收应答的一个过程。

 

三、常用的接口协议(网络协议)

1、HTTP协议(Hyper Text Transfer Protocol超文本传输协议)

一个属于应用层的面向对象的协议,基于TCP/IP通信协议来传递数据(HTML 文件、图片文件、查询结果等),用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器。明文传输,端口号:80。

HTTPS协议超文本传输安全协议。加密传输,端口号:443。

2、SOAP协议(Simple Object AccessProtocol简单对象访问协议)

它基于XML(标准通用标记语言下的一个子集),提供了HTTP所需的扩展。它是轻型协议,用于分散的、分布式计算环境中交换信息,有助于以独立于平台的方式访问对象、服务和服务器。

3、Dubbo协议

简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。

4、其他协议

是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。明文传输,端口号:80。

HTTPS协议超文本传输安全协议。加密传输,端口号:443。

 

四、HTTP协议

1、交互过程

客户端向服务器发送一个请求(Request),服务器返回一个响应(Response),就是一次交互过程。

 

2、报文

数据包,网络上发送的一段数据。

 

3、URL(Universal Resource Locator统一资源定位符)

它是网址的另一个名称。在WWW上,每个文件都有一个唯一的URL,

URL的组成:(三部分版本)资源类型、存放资源的主机域名、资源文件名 / (四部分版本)协议、主机、端口、路径。

URL的格式:http://ip或域名:端口/请求路径

(请求路径的 / 代表服务器的部署目录)

实例:https://blog.csdn.net/maoxuexue/article/details/105958996

 

4、查看报文格式

1)浏览器自带的开发者工具(快捷键F12)

2)HttpWatch浏览器插件

只支持IE和firefox浏览器。

3)Fiddler抓包工具

一个使用本地 127.0.0.1:8888 的 HTTP 代理,任何能够设置 HTTP 代理为 127.0.0.1:8888 的浏览器和应用程序都可以使用 Fiddler。专门用于Http协议报文, 可以抓取电脑浏览器和手机APP的HTTP请求和响应。

https://blog.csdn.net/maoxuexue/article/details/105963509

 

5、报文格式

1)Request报文的格式

①请求行 / request line

GET http://127.0.0.1/test.html HTTP/1.1

格式:请求方法[空格]请求资源的路径(URL)[空格]HTTP协议版本号

位置:请求报文的第一行

②请求头部 / 请求首部 / headers

(常用字段)

Host: 127.0.0.1
Connection: keep-alive #指定持续连接,或指定在响应完成后关闭连接。
Cache-Control: max-age=0 #指定缓存指令(请求时的缓存指令包括:no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached)
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36 #客户端使用的 操作系统和浏览器 的名称和版本。
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
If-None-Match: "ab-5a4fdc896be1b"
If-Modified-Since: Wed, 06 May 2020 17:06:22 GMT

格式:全部类似于键值对(头部字段名:值

位置:请求行以下,空行以上

介绍:请求的附加信息

[空行]

③请求正文 / body

位置:空行以下

介绍:请求携带的数据

注:get请求的body一般为空

 

2)Response报文的格式

①状态行

HTTP/1.1 200 OK

格式:HTTP协议版本号 状态码 状态码说明

位置:响应报文的第一行

②响应头部 / 响应首部 / headers

(常用字段)

Date: Wed, 06 May 2020 17:45:03 GMT
Server: Apache/2.4.10 (Win32) OpenSSL/0.9.8zb PHP/5.3.29
Last-Modified: Wed, 06 May 2020 17:45:00 GMT
ETag: "ac-5a4fe52baa585"
Accept-Ranges: bytes
Content-Length: 172 #表示服务器返回的内容长度(即响应报文的body的长度):字节数。
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html #表示服务器返回的内容格式(即响应报文的body的格式):type/subtype(类型/子类型)。eg:image/png image/jpeg text/html text/plain

格式:全部类似于键值对(头部字段名:值

位置:状态行以下,空行以上

介绍:响应的附加信息

[空行]

③响应正文 / body

<!DOCTYPE html>
<html>
<head>
    <title>这是页面标题</title>
    <meta charset="utf-8">
</head>
<body>
    <h1>这是一级标题1</h1>
</body>
</html>

介绍:服务器返回给客户端的文本信息

 

6、请求方法

REST风格的接口设计建议:

查询数据使用GET

新增数据、提交表单使用POST

更新数据使用PUT

删除数据使用DELETE

序号 方法 描述
1 GET 请求指定的页面信息,并返回实体主体。
2 HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5 DELETE 请求服务器删除指定的页面。
6 CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7 OPTIONS 允许客户端查看服务器的性能。
8 TRACE 回显服务器收到的请求,主要用于测试或诊断。
9 PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。

 

7、状态码

1)全部状态码:https://www.runoob.com/http/http-status-codes.html

2)常见状态码:

200(OK):客户端请求成功

301(Moved Permanently):永久重定向

302(Found):临时重定向

304(Not Modified):文件从上次请求后内容没有更新,请使用缓存

解决办法:清浏览器缓存,重新发送请求。

如谷歌浏览器:ctrl+shift+delete

400(Bad Request):请求语法错误,无法被服务器理解

401(Unauthorized):请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403(Forbidden):服务器收到请求,但是拒绝提供服务

404(Not Found):请求路径错误

405(Method Not Allowed):请求方法错误

500(Internal Server Error):服务器发生不可预期的内部错误,无法处理请求

503(Server Unavailable):服务器因超载或系统维护,暂时不能处理请求,过段时间可能恢复正常

3)状态码分类:

1**(指示信息):服务器已收到请求,需请求者继续执行操作

2**(成功):请求已被成功接收并处理

3**(重定向):需进一步操作以完成请求

4**(客户端错误):请求包含语法错误或请求无法实现

5**(服务器错误):服务器在处理请求的过程中发生了错误

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/maoxuexue/article/details/105956058
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-27 21:59:05
  • 阅读 ( 1096 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢