-
网络资源:利用网络可以获取任何信息资源, 例如:浏览器输入某网站域名,就打开某网站首页
-
资源怎么表示? 通过URL表示
-
URL:统一资源定位符,表示网络资源的存储位置
-
URL的组成:
-
协议:网络通信使用一套规则(按照什么规则通信的应用服务)。例如:HTTP、HTTPS
-
域名或主机:访问的资源服务器的IP或者域名。例如:www.baidu.com
-
端口:标识特定的应用程序/服务,程序通信的出入口。例如:HTTP默认端口80,HTTPS默认端口443
-
资源路径(可选):存放的具体路径。
-
查询参数(可选):请求携带的参数。通过 ? 进行分隔,多个参数之间通过&符号连接。
- 构成:
协议://域名或IP:端口号/资源路径?查询参数 - 必填:
协议://域名或IP:端口号如果是协议默认的端口号,可以不写
-
网络传输协议(HTTP)
-
协议:网络中数据传输遵循的规则 , 网络协议:计算机通信的规则, 常见协议:HTTP/HTTPS、SSH、FTP等
-
HTTP:超文本(文字、图片、音频、视频)传输协议,访问网络中资源常使用的一种协议(网络中传输类似于网页类型的文档的协议)。默认端口号:80 ; HTTPS:安全的超文本传输协议。默认端口号:443
-
HTTP访问过程
- ①HTTP请求:请求行、请求头、请求体
- ②HTTP响应:响应行、响应头、响应体
HTTP请求说明
- 请求行:请求数据包的第一行内容
- 请求头:从第二行到空行之间内容
- 请求体:空行下方的内容
http请求-请求行
- 位置:HTTP请求的第一行
- 作用:描述请求的方法、URL、协议版本信息
- 请求方法作用:按照什么方式操作资源
- 常见的HTTP请求方法:
- GET:从服务器获取资源(查)
- POST:在服务器新建一个资源(增)
- PUT:在服务器更新资源(改)
- DELETE:从服务器删除资源(删)
面试题: http请求方法中,get请求和post请求有啥区别?
- 是否有请求体:post有请求体,get没有请求体
- 参数位置:post发送请求携带参数一般在请求体中,get请求参数在URL中
- 参数大小:get请求携带参数大小受限制,post请求参数大小不受限制
- 是否安全:get请求不安全(URL中直接能看到),post请求相对安全
- 方法作用:get查询、post任意
- 是否缓存:get有缓存,post没有
- 支持编码:get请求的URL编码是ASCII,post请求的请求体数据编码任意类型
http请求-请求头
- 位置:HTTP请求的第二行到空行之间
- 作用:描述请求客户端的属性信息
- 请求头的Content-Type:表示请求体的数据类型
- text/html: HTML格式
- text/plain:纯文本格式
- image/jpeg:jpg图片格式
- application/json: JSON数据格式
- application/x-www-form-urlencoded: 表单默认的提交数据格式
- multipart/form-data: 在表单中进行文件上传时使用
http请求-请求体
- 位置:空行下面内容
- 作用:描述请求携带的数据
- 请求体:表示传输的数据;在post和put方法中使用,配合请求头Content-Type
案例:F12抓取指定URL的登录接口,获取HTTP请求数据
- 请求的接口URL:
- 请求的方法:
- 请求数据类型:
- 请求数据:
HTTP响应说明
- 响应行:响应数据包第一行内容
- 响应头:从第二行开的到空行之间内容
- 响应体:空行下方的内容
http响应-响应行
- 位置:HTTP响应的第一行
- 作用:描述服务器处理结果
- 常见响应状态码(三位数字组成):
- 2xx:成功 【200】
- 3xx:重定向 【301、302】
- 4xx:客户端错误 【401、403、404】
- 5xx:服务器端错误 【500、503】
http响应-响应头
- 位置:HTTP响应第二行到空白行
- 作用:描述服务器属性信息
- 组成:由键值对组成
http响应-响应体
- 位置:HTTP响应空白行以下
- 作用:服务器返回的数据
- 类型:有图片、json、html、xml等
案例:F12抓取指定URL的登录接口,查看响应数据
- 页面地址: hmshop-test.itheima.net/
- 响应状态码:
- 响应数据及具体类型:
附:常见HTTP响应状态码
抓包
- 抓包(packet capture):使用工具抓取客户端与服务器交互数据包的操作。
- 数据包:客户端与服务器相互交互的内容。
- 常见抓包工具:F12,Charles,Fiddler等
- 为什么抓包?(应用场景)
- 定位前后端bug
- 模拟弱网测试
- 绕过界面(拦截请求修改),模拟测试后台接口
- 如何区分前后端 bug?
- ① 如果抓不到请求或请求有误是前端问题;
- ② 如果有请求且正确但是没响应或者响应错误,那就是后端的问题;
- ③ 如果抓包有请求也有响应且都正确,但是页面显示还是报错了,则还是前端问题(页面渲染)。
抓包工具Charles和Fiddler区别
- 支持的操作系统比较多:Windows、macOS、Linux
- Charles收费(免费试用时间30天)
工具介绍:Charles是一款在Windows/Mac下常用的数据包截取工具,支持Web/APP端网络数据包的抓取分析。
抓包原理:
抓包工具Charles
1.抓取HTTPS的数据包设置
- 网络设置--设置【Firefox为例】
- Charles设置代理
Proxy -- Proxying Settings
2.抓包步骤
抓包步骤:
- 打开Charles工具,开启代理设置(Proxy Settings...)
- 打开默认浏览器(浏览器也需要设置代理),输入待抓包的地址,回车/刷新
- 查看会话列表抓取到的数据包(按照域名找到对应的数据包)
- 开启代理(
Proxy --> Proxy setting--> enable transparent HTTP proxying)
-
抓取对应数据包
通过工具栏,清除工具,清除会话信息之后再操作浏览器抓取新包
- 抓取线上tpshop首页数据包并过滤
3.应用场景介绍
3.1 定位前后端bug
能够根据抓包工具定位前后端bug
面试:如何定位前后端bug?
-
案例问题分析
# tpshop后台新增会员成功后,详情中显示的性别和前端页面显示的性别不一致,该问题是前端还是后端的问题? -- 不确定提交bug给前端开发还是后端开发 # 通过抓包去定位,怎么抓包? 1.浏览器输入访问服务器地址,回车发送请求,查看抓包工具中是否有数据包 2.确定需要抓取哪个页面的数据包【上述问题的数据源于登录成功的接口响应--> 个人信息】 3.抓取登录成功的数据包【进入登录页面,Charles中清空其他数据包,直接登录成功操作】 4.进入Charles查看当前服务器地址下面的第一个/第二个数据包基本就是登录的数据包 5.进一步查看数据包中请求体数据是否是页面输入的数据,如果是那就是登录的数据包 6.看响应体的数据,从中获取与性别有关的字段值【需要对比数据库看是否和数据库存储的一致】 结论:请求数据正确(请求发送的和页面一致)、响应数据正确(后台响应的和数据库一致)、但是最终前端页面显示还是错误-->前端bug- 数据库截图+抓包响应截图
-
定位思路
①确认请求是否有问题,请求有问题-->前端
②确认响应是否有问题,响应有问题-->后端
如何确定响应的问题? - 返回的数据和数据库是否一致③请求响应都没有问题,但页面显示错-->前端
案例 1.定位前后端bug:电商前端页面显示会员性别和后台页面不一致
3.2 弱网设置
弱网延时和带宽设置--> 模拟不同网络
- 使用fiddler时可以计算延迟时间(1KB或者1MB)
- Charles设置弱网操作界面
-
具体模拟测试步骤
-
不开启弱网,用正常网络访问页面,抓取对应数据包查看传输时间【Duration】
-
设置好弱网参数后,开启弱网,再次访问上述同一页面,抓取对应数据包查看传输时间
-
对比两次访问的【Duration】时间变化,弱网情况下有延迟,且页面不能出现崩溃。
-
案例 2.模拟弱网测试:模拟带宽比较低的网络测试延迟
- 需求:模拟3G网络带宽,访问tpshop首页,查看延时多少?是否有异常?
- 设置:
-
- 设置网络带宽
-
- 操作对应页面/APP应用
-
- Charles查看延迟时间/趋势变化
-
- 确认应用程序是否有异常
-
3.3 绕过界面做服务端测试
场景:页面部分异常数据,在前端做限制了,无法测试,可以绕过界面做接口验证测试。
-
项目案例
例如: 1.注册登录中如果手机号超过11位长度测试,如果超过11位,页面可能无法输入测试,可以绕过界面测试 2.购物车商品数量有上限200的限制,页面无法输入201,可以绕过页面做接口结果测试- 拦截请求:测试后台接口【后台逻辑正确】
- 拦截响应:测试页面显示【变形、报错】
-
操作步骤
最后点击关闭断点按钮
案例 3.异常数据测试:绕过界面直接测试服务器
- 需求:购物车商品数量有上限200的限制,页面无法输入201,可以绕过页面做服务端测试
- 设置:
- 打开浏览器输入待测地址
- 在Charles的 Proxy->Breakpoints
- 勾选:Enable Breakpoints
- 点击:Add 添加设置断点的URL信息
- 【可设置:
protocol、host、request、response】
- 确认:设置完成后点击 OK
- 在浏览器模拟用户进行操作测试
- Charles开始抓取到当前数据包并闪烁提示
- 在Charles的 Breakpoints 修改请求的数据 → 点击 Execute
- 在Charles的 Breakpoints 修改响应的数据 → 点击 Execute(注:可跳过修改响应,直接执行)
- 弹出的断点数据包含一路 Execute 执行完毕 → 最后点击 关闭断点按钮