HTTP协议
接口知识:
HTTP协议
对应上述请求过程:
- 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
- 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
- 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
- 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
- 释放 TCP连接;
- 浏览器将该 html 文本并显示内容;
由curl命令查看一个请求的全过程引入:
curl https://www.baidu.com -vvv
* Rebuilt URL to: https://www.baidu.com/
* Trying 39.156.66.14...
* TCP_NODELAY set
* Connected to www.baidu.com (39.156.66.14) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: C=CN; ST=beijing; L=beijing; OU=service operation department; O=Beijing Baidu Netcom Science Technology Co., Ltd; CN=baidu.com
* start date: May 9 01:22:02 2019 GMT
* expire date: Jun 25 05:31:02 2020 GMT
* subjectAltName: host "www.baidu.com" matched cert's "*.baidu.com"
* issuer: C=BE; O=GlobalSign nv-sa; CN=GlobalSign Organization Validation CA - SHA256 - G2
* SSL certificate verify ok.
> GET / HTTP/1.1
> Host: www.baidu.com
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: keep-alive
< Content-Length: 2443
< Content-Type: text/html
< Date: Wed, 11 Mar 2020 13:07:36 GMT
< Etag: "588603eb-98b"
< Last-Modified: Mon, 23 Jan 2017 13:23:55 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus=autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn" autofocus></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=https://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');
</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>©2017 Baidu <a href=http://www.baidu.com/duty/>使用百度前必读</a> <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a> 京ICP证030173号 <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
* Connection #0 to host www.baidu.com left intact
三次握手:A主机与B主机
1.A发出连接请求
2.B确认A的请求,并向A发出确认请求
3.A确认B的确认请求,连接建立。
如果只有前两个步骤,A没有确认B的确认请求,可能会出现,当A的请求发生网络延迟,A连接失败,此时B确认请求后等待A的数据,而现在的A没有连接B,导致B的资源浪费 。
四次挥手:A主机与B服务器
1.A发起关闭连接
2.B确认关闭连接,此时处于半关闭状态,也就是A不能给B发送报文,B可以给A发送报文。
3.B等待当前报文传输结束,B发起关闭连接
4.A确认关闭连接。
A确认关闭连接后,有2MSL等待时间,用于清除网络中所有旧连接报文段,在新连接中不会出现旧连接的请求报文。
五层经典模型:
物理层:定义物理设备之间如何传输数据
数据链路层:在通信的实体间建立数据链路链接
网络层:为数据在节点之间的传输创建逻辑链路
传输层:向用户提供可靠的端到端的服务,传输层通过封装向高层屏蔽了下层数据通信的细节
应用层:为应用软件提供了很多服务,构建于tcp协议之上,屏蔽了网络传输相关的细节
HTTP协议是基于TCP/IP协议之上的应用层协议。
- 基于请求-响应模式
- 无状态保存【Cookie】
- 无连接
HTTP请求方法:
GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS、CONNECT
HTTP状态码
- 1xx消息——请求已被服务器接收,继续处理
- 2xx成功——请求已成功被服务器接收、理解、并接受
- 3xx重定向——需要后续操作才能完成这一请求【重定向】
- 4xx请求错误——请求含有词法错误或者无法被执行【服务器无法处理请求】
- 5xx服务器错误——服务器在处理某个正确请求时发生错误【服务器处理请求出错】
请求报文:请求行、请求头部、空行、请求数据
响应报文:状态行、响应头部、空行、响应数据
url基本元素
- 传送协议。
- 层级URL标记符号(为[//],固定不变)
- 访问资源需要的凭证信息(可省略)
- 服务器。(通常为域名,有时为IP地址)
- 端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略)
- 路径。(以“/”字符区别路径中的每一个目录名称)
- 查询。(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)
- 片段。以“#”字符为起点
http请求体body的集中数据格式
- multipart/form-data
- application/x-www-form-urlencoded
- raw 可以上传任意格式的文本
- binary:上传二进制文件
接口分析工具–辅助
- 基础款:开发者工具
(1)XHR–查看调用模块【后台】
(2)copy as cURL–可以使用curl命令,查看请求响应相关数据,修改请求相关参数
(3)har格式–可自动生成接口测试用例
(4)nc探测工具 - 代理款:Charles
(1)限速–Throttle Setting
(2)断点–Breakpoint Setting
(3)mock-map remote远程文件:模拟跳转预发布的网站
(4)mock-map local本地文件:使用本地文件替换线上关键资源
(5)mock-rewrite挡板:基于原有数据做修改–修改请求、响应等 - 监听分析:tcpdump+wireshark【重】+har提取
- 转发分析:修改host域名+反向代理转发
RestAssured简单介绍
RestAssured优势:
- 简约的接口测试DSl
- 支持xml、json的结构化解析
- 支持xpath jsonpath、gpath等多种解析方式
- 对Spring的支持比较全面
RestAssured基本用法:
- 创建maven项目,导入RestAssured、Junit依赖包;
- given()、when()、then() 模式测试语句
- 基础的