作者:极客小俊
微信官方账号:同名
前言
有人做了五年的开发,抓不到包!
但不要害怕,不要哭,跟着我学会一定有收获! 兴趣是你最好的老师。如果你感兴趣,你必须学习 ,把他们卷死!??????????????!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
温馨提示:全程干货,内容较多,建议新手朋友可以先表扬 慢慢看收藏!
??
Fiddler是什么?
在正式学习Fiddler
之前, 我们还是要对的Fiddler
初步了解!
Fiddler
是以web proxy
以代理服务器的形式工作 , 它也是一个http协议
数据抓包和调试代理工具记录
和检查
目前,你的计算机和互联网之间http
消息, 也就是说,可以传输网络发送与接受
的数据包
进行截获、重发、编辑、转存
等操作 也可用于检测网络安全。 是不是感觉很强大?????感觉很强大!??!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Fiddler主要能做什么?
Fiddler
是一个客户端
和服务端
的一个http
代理工具 , 客户端
和服务端
彼此之间的交流是可以的Fiddler
所监听到!
Fiddler
不仅是一个非常强大的抓包工具,也是一个web
调试的利器
可实现以下功能:
- 监控我们
浏览器
所有的http/https
所有的信息和流量,即所有的可以监控 - 监听截取
http
请求后,你可以做一些事情查看 分析
浏览器请求的内容细节可以伪造一些请求 可以伪造服务器响应! - 还可以测试网站的性能
- 解密
https
的web会话 - 全局、局部断点功能!
Fiddler
也有广泛的应用场景
- 接口测试
- 接口调试
- 在线环境调试
- web项目性能分析
- 前后端bug监测
- 弱网断网监测
- hosts配置监测
- mock模拟测试
要知道Fiddler
作为一个系统代理,所有来自微软互联网服务的人http请求
在到达目标Web服务器
以前都会经过Fiddler
,同样,一切Http
在返回客户端之前,响应也通过Fiddler
。
为什么要学习?Fiddler?
因为我们必须和解开发http
对吧? 还有一些新手朋友要学习http
但是http
如果你没有一个知识点,知识点更多,更混乱看见摸着
的数据参照
,很难控制http
信息, 那么要理解http
我个人可以从协议开始抓包工具
从浅到深的形式慢慢理解http
以及Fiddler
使用这种抓包工具
所以不管你是分析http
还是刚学习http
的朋友 ,可以先学习Fiddler
抓包工具!
并且在windows
只要系统下提到抓包
首选肯定是Fiddler
总之学习了Fiddler
之后,会让你对的http
理解更上一层楼!
下载Fiddler
官方下载地址
https://www.telerik.com/download/fiddler
填写好电子邮箱
和国家地区
点击Download for windows
可以下载
如图
注意
这个Fiddler
工具是基于.NET Framework
的 ,因为Fiddler
是c#
开发的
假如比较老windows系统
确保运行环境!
Fiddler
安装方法也很简单 获得安装包后,直接选择安装路径 或 下一步没脑子就可以了!????????????????????????????????!??????????????????????!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
如下界面将显示安装成功!
软件体系结构—B/S 与 C/S架构
B/S架构
在了解Fiddler
在原理之前,让我们先了解一下web
最基本的架构是什么?B/S
架构, 它也是目前最常用的软件架构之一
B
就是浏览器(Browsers)
也就是客户端
这边
S
就是服务器端(Server)
也就是web服务器
这边
我们平常的web服务、web项目、web应用
都是运行在服务端
的, 那么通过绑定ip地址 端口监听
接收和处理一些前端,即客户端
发起的http
请求, 从而客户端
通过http协议
在指定的服务器上获得请求和请求页面 文件 资源、
等等…
如图
举个例子
当你在浏览器
输入地址栏百度
地址结束后,服务器终端将返回百度html
页面资源
总结
B/S架构
就是浏览器/服务器
的一种交互模式
,是Browser/Server
的简称。
此外,该架构软件不需要在用户的安装任何东西客户端
程序只需要安装在用户的电脑上浏览器
即可。
用户只使用浏览器
通过web服务器与数据库交互,交互的结果将是html网页
形式显示在浏览器
上。
C/S架构 [了解]
出了我们的B/S架构
,其实还有一种C/S架构
是客户端/服务端
互动模式,是的Client/Server
简称。它是早期常用的一种软件架构
,该架构软件需要安装在用户的电脑上客户端程序
, 感兴趣的朋友可以自己理解,这里就不赘述了!
在软件开发中,我们通常根据需要选择两个基本架构!
HTTP 基础知识
学习Fiddler
的时候,HTTP
知识点也是必不可少的, 所以这里一定要给大家简单介绍一下HTTP
相关知识!
http
中文意思为超文本传输协议
英文全称为Hyper Text Transfer Protocol
它是用于万维网服务器
传输超文本
一种本地浏览器传输协议
目的是保证客户端
与服务端
间的通信
什么是http请求和响应?
http
的工作方式为一个简单的客户端请求 与 服务端响应
的应答过程
它指定了客户端
发送给服务器
什么样的消息形式
以及得到什么样的消息响应
所有的www
文件都必须遵循这个标准协议, 目的是提供一种发布和接收html页面
的方法
举个例子
比如说 客户端(浏览器)
向服务器
提交一个http请求
, 那么服务器
又会向客户端
这边返回响应信息
。而这些响应信息
包含关于客户端
请求的状态信息以及客户端
所需要的内容信息。
如图
http协议和web之间的本质
其实就是浏览器
和服务器
打交道的
客户端
向服务器端
发送Http请求
,然后服务器端
向客户端
返回http
响应!
http协议
就是浏览器
和服务器
之间进行沟通的一种规范, 也就是以这个规范
来向服务器发起请求
, 服务器才会给客户端
进行正确的响应, 所以http
有的时候也可以理解为是一种 规范、规则、标准
http协议
是属于应用层
的协议,而且是基于TCP/IP协议
的, 也就是说http
通信发生在TCP/IP
链接之上
通俗一点说http协议
就是基于TCP
的一种应用层协议
它不会关系数据传输的细节问题,也就是说你不用去关心它下层TCP
的运行逻辑, 它的核心只在于用来规定客户端和服务端
的数据传输格式
最早http
是用来向客户端传输html文件内容
,默认的端口80
扩展
有兴趣的朋友可以自行了解一下iso网络七层模型
通俗点说http
,就是在请求和响应
之后,服务器端立即关闭连接
,并释放资源,这样既保证了资源可显示与可用性,也吸取了TCP协议
的可靠性优点,但是缺点就无法跟踪用户的操作了,所以我们在后端开发
的学习中才会接触一个东西叫session和cookie
技术
所以你也可以理解为http
是基于请求与响应
的模式, 并且是无状态的应用层协议
http请求和响应的基本原理
任何一个http请求
都只会分为两个部分: 一个请求报文
另外一个是响应报文
请求报文
是客户端
按照一定的格式生成一段文本,然后发给我们的服务端
, 而服务器
接收到了这样一个请求报文
就会解析里面的内容,然后做出回馈,也就是响应
响应报文
也就是服务器端
根据请求报文
反馈给客户端
的文本信息
http请求报文 (request)基本结构
http请求(request)
也叫请求报文
一个基本的http请求报文
结构分为如下几点:
请求行
:就是请求方式和协议,也就是说用于描述客户端
的请求方式
,例如post/get
方式, 以及请求的资源名称和HTTP协议
的版本号!若干个请求头
: 这些也叫消息头
告诉服务器发送的是什么数据类型,编码类型、请求的是哪台主机、以及客户端浏览器的一些系统环境
等等, 这些消息头
中有很多头部字段名
和对应的值
它的格式为name:value
空白行
请求正文内容
抓包了解一下
那么我们在学习http
知识的时候 就可以先直接使用Fiddler
来抓取一个http请求
和http响应
来先看看到底是什么东西!
这样也有助于一些新手来理解http
!
我们可以通过Fiddler
抓取网络数据包的手段,就可以看到一个基本的http请求
结构都包含哪些信息!
例如一个GET方式
的请求(Request)
信息 如下:
GET https://www.baidu.com/?name=zhangsan HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,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
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
例如一个POST方式
的请求(Request)
信息 如下:
POST https://api.codelife.cc/stat/userHm HTTP/1.1
Host: api.codelife.cc
Connection: keep-alive
Content-Length: 48
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36
Content-Type: application/json
Accept: application/json, text/plain, */*
sec-ch-ua-platform: "Windows"
version: 1.2.27
Origin: chrome-extension://mhloojimgilafopcmlcikiidgbbnelip
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
{"fp":"4c49c2fd79e1658546e4b8ad","tn":6}
怎么样 是不是看这一大堆脑壳都大了呢 ? 哈哈哈不要着急,我们慢慢来学!😁😁😁
我们先来看一张请求(Request)
图解
如图
然后我们来逐一拆解
上图中的各个部分!
1.请求方式 (Request method)
我们常见的一些请求方式也就是POST/GET
,当然还有其他的一些请求方式, 如下表:
请求方法 | 描述 |
---|---|
GET |
请求资源 比如常见的就是输入一个URL 去请求一个资源下来, 它也可以带上一定的参数一起请求 |
POST |
提交资源 比如说我们想把用户名和密码 提交到服务器去,这个时候用POST 比较好 |
HEAD |
获取响应头 |
PUT |
替换资源 |
DELETE |
删除资源 |
OPTIONS |
允许客户端查看服务器的性能 |
TRACE |
显示服务器收到的请求 常见于测试和调试诊断! |
2.URL (Uniform Resource Locator)
URL
中文名为统一资源定位符
英文全称Uniform Resource Locator
,
我们网络中的每一信息资源都有统一的且在网上唯一的地址!
URL具体由4部分组成:协议、主机、域名、端口、路径文件、[附加资源]
URL的一般语法格式为:
protocol :// hostname[:port] / path / [?query-parameters]
1.协议 (protocol)
协议有http、ftp、https
、等…
2.主机名 (hostname) + 域名
主机名+域名
例如: www.xsphp.com
3.端口 (port)
端口是一个数字, 端口是可选的 省略时使用方案是服务器默认配置的端口
例如 80、8080、..
各种传输协议
都有默认的端口号,如http协议
的默认端口为80
如果URL地址
省略端口,则使用默认端口号
注意
有时候出于安全或其他考虑,可以在服务器配置上对端口进行重新定义,也就是采用非标准端口号
,那么此时,URL地址
中就不能省略端口号
这一项。
4.路径文件 (path)
由零或多个/
符号隔开的字符串,一般用来表示主机上的一个目录或文件地址
例如: /tpl/index.php
5.查询参数 附加资源 (query-parameters)
这一项在URL
中也是可选的 用于给动态网页如 PHP/JSP/ASP/ASP.NET
等后端页面 传递参数
的一种方式,并且如果是GET
请求方法, 那么可有多个参数, 它们彼此用&
符号隔开,每个参数的名和值用=
符号隔开
语法格式: ?参数=值&参数2=值
以此类推!
例如: ?id=33&age=25&name=zhangsan
举个例子
一个比较常见的url
地址, 如下:
https://www.xxxx.net/xxxx/xxxx/xxxx/100?num=1001.2014.3001.5501
3.请消息求头 (Request Header)
请求消息头
也叫消息头
告诉服务器发送的是什么数据类型,编码类型、请求的是哪台主机、以及客户端浏览器的一些系统环境
等等前面已经说过了, 并且请求头
是可以由开发人员根据需求去进行自定义
的
这些消息头
中有很多头部字段名
和 对应的值
它的格式为 name:value
我们常见的一些请求头
如下表:
请求头 | 描述 |
---|---|
Host |
主机IP地址或域名 |
User-Agent |
提交一些客户端 相关信息,例如: 操作系统、浏览器 等一些版本信息给服务器 , 而这些信息可能会让服务器 按照一定的规则给客户端 返回兼容性比较好的信息! |
Accept |
指定客户端 接收的信息类型,例如:image/jpg,text/html,application/json 也就是可以让客户端 告诉服务器 之后客户端这一边想接收到什么样的数据格式 |
Accept-Charset |
告诉服务器 等一会这边客户端 需要接收的字符集编码格式 , |
Accept-Encoding |
告诉服务器 , 客户端这边可接受的内容压缩编码 ,例如gzip 可以在一定程度上节省流量! |
Accept-Language |
告诉服务器, 客户端 可接受的语言,例如Accept-Language:zh-cn |
Authorization |
客户端提供给服务端进行权限认证的信息, 也就是要告诉服务器端一些认证的信息,服务器才能返回响应的数据! |
Cookie |
携带的COOKIE信息, 普通情况下,当一个用户登录成功,就会在本地保存一份cookie ,下次请求就会直接带上这个cookie 信息,也就是这个用户的相关信息 |
Referer |
当前文档的URL 也就是纪录下从哪个链接地址 提交到服务器 的 |
Content-Type |
向服务器 提交内容的格式例如:Content-Type:application/x-www-form-urlencoded 总而言之,就是告诉服务器 ,客户端 传递的内容属于什么格式 或 其他编码格式! |
Content-Length |
数据长度, 也就是客户端 向服务器端 提交内容的数据长度有多少字节! |
Cache-Control |
缓存机制,例如:Cache-Control:no-cache |
pragma |
防止页面被缓存,与Cache-Control:no-cache 作用一样 |
… |
我们可以用Fiddler
截取一个请求头
看看
如图
4.空行
空白行
也就是在消息头
结束的下方,会存在一个空白行
, 这是必须存在的, 是由HTTP
标准规定的!
5.请求体
请求体
它的出现是要根据请求的方式不同而不同, 也就是如果是POST
那么就会以键与值
的形式进行发送, 如果是GET
请求那么这里就不会包含请求正文内容
http响应报文 (Response)基本结构
http响应(response)
也叫响应报文
其实响应报文
比请求报文
更加简单, 你只要能够搞懂请求报文
那么响应报文
就很容易搞懂!
http响应(response)
的一个基本结构分为如下几点:
响应行
响应头
空白行
响应体
我们可以通过Fiddler
抓取网络数据包的手段,就可以看到一个基本的http响应
结构都包含哪些信息!
举个例子
如果你还看不明白 那么我们先来看一张http响应(response)
图解 你就会明白了!
然后我们来逐一拆解
上图中的各个部分!
1.响应行
响应行
也叫状态行
, 上图中响应行
内部其实包含了3个重要的信息部分:
HTTP协议的版本、HTTP状态码、HTTP的状态描述
1.HTTP协议的版本
现目前都是HTTP/1.1
版本 这个没什么好说的!
2.HTTP状态码
可以用来表示网页服务器端给客户端返回的HTTP
响应状态, 通常都是3位数字
的代码, 而这些常见的状态码
又可以分为几种提示类型: 🙂 如下表
类别状态码 | 描述 |
---|---|
1xx |
这种类别的状态码 为提示消息类型 通常表示请求被服务器端成功接收 |
2xx |
这种类别的状态码 为成功消息类型 通常表示请求被服务器端成功处理 |
3xx |
这种类别的状态码 为重定向类型 通常表示被服务器端重新定义了请求方向,需要进一步的操作以完成请求 |
4xx |
这种类别的状态码 为客户端错误信息 通常表示服务器告诉客户端的一些错误消息 |
5xx |
这种类别的状态码 为服务端错误信息 通常表示告诉客户端 服务器这边出现的一些错误信息 |
3.HTTP的状态描述
是紧跟在状态码
后面的英文单词
每一种具体类别状态码+状态描述
可以参考下表:
1xx: 提示消息类型
消息: | 状态描述 | 含义 |
---|---|---|
100 | Continue | 服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。 |
101 | Switching Protocols | 服务器转换协议:服务器将遵从客户的请求转换到另外一种协议。 |
2xx: 成功消息类型
消息: | 状态描述 | 含义 |
---|---|---|
200 | OK | 请求成功(其后是对GET和POST请求的应答文档。) |
201 | Created | 请求被创建完成,同时新的资源被创建。 |
202 | Accepted | 供处理的请求已被接受,但是处理未完成。 |
203 | Non-authoritative Information | 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝。 |
204 | No Content | 没有新文档。浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。 |
205 | Reset Content | 没有新文档。但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。 |
206 | Partial Content | 客户发送了一个带有Range头的GET请求,服务器完成了它。 |
3xx: 重定向类型
消息: | 状态描述 | 含义 |
---|---|---|
300 | Multiple Choices | 多重选择。链接列表。用户可以选择某链接到达目的地。最多允许五个地址。 |
301 | Moved Permanently | 所请求的页面已经转移至新的url, 说通俗一点表示请求的资源分配了url,以后就应该使用这个url |
302 | Found | 所请求的页面已经临时转移至新的url, 也就是说请求的资源临时分配了url,本次请求暂且使用这个url, 这里302与301 的区别是,302表示临时性重定向,重定向的url还有可能还会改变。 |
303 | See Other | 表示请求的资源路径发生改变,请使用GET 方法请求url。其实与302一样,但是明确指出让我们使用GET 方法请求url |
304 | Not Modified | 未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。 |
305 | Use Proxy | 客户请求的文档应该通过Location头所指明的代理服务器提取。 |
306 | Unused | 此代码被用于前一版本。目前已不再使用,但是代码依然被保留。 |
307 | Temporary Redirect | 被请求的页面已经临时移至新的url。 |
4xx: 客户端错误信息
消息: | 状态描述 | 含义 |
---|---|---|
400 | Bad Request | 服务器未能理解请求,通常为表示请求的报文中存在语法错误 ,比如: 提交json 数据的时候,如果json 格式有问题,接收端接收json ,也会出现400 bad request |
401 | Unauthorized | 被请求的页面需要用户名和密码。 |
402 | Payment Required | 此代码尚无法使用。 |
403 | Forbidden | 对被请求页面的访问被禁止。 |
404 | Not Found | 服务器无法找到被请求的页面。 |
405 | Method Not Allowed | 请求中指定的方法不被允许, 请求的方式get、post、delete 方法与后台规定的方式不符合 例如: 比如: 后台方法规定的请求方式只接受get ,如果用post 请求,就会出现 405 method not allowed 的提示 |
406 | Not Acceptable | 服务器生成的响应无法被客户端所接受。 |
407 | Proxy Authentication Required | 用户必须首先使用代理服务器进行验证,这样请求才会被处理。 |
408 | Request Timeout | 请求超出了服务器的等待时间。 |
409 | Conflict | 由于冲突,请求无法被完成。 |
410 | Gone | 被请求的页面不可用。 |
411 | Length Required | “Content-Length” 未被定义。如果无此内容,服务器不会接受请求。 |
412 | Precondition Failed | 请求中的前提条件被服务器评估为失败。 |
413 | Request Entity Too Large | 由于所请求的实体的太大,服务器不会接受请求。 |
414 | Request-url Too Long | 由于url太长,服务器不会接受请求。当post请求被转换为带有很长的查询信息的get请求时,就会发生这种情况。 |
415 | Unsupported Media Type | 由于媒介类型不被支持,服务器不会接受请求, 例如: 后台程序不支持提交的content-type 类型,就会返回415 |
416 | 服务器不能满足客户在请求中指定的Range头。 | |
417 | Expectation Failed |
5xx: 服务器错误信息
消息: | 状态描述 | 含义 |
---|---|---|
500 | Internal Server Error | 请求未完成。服务器遇到不可预知的情况。 |
501 | Not Implemented | 请求未完成。服务器不支持所请求的功能。 |
502 | Bad Gateway | 请求未完成。服务器从上游服务器收到一个无效的响应。 |
503 | Service Unavailable | 请求未完成。服务器临时过载或当机。 |
504 | Gateway Timeout | 网关超时。 |
505 | HTTP Version Not Supported | 服务器不支持请求中指明的HTTP协议版本。 |
2.响应头 (Response Header)
响应头
也叫消息报头
也就是服务器端
要告诉客户端
的一些附加信息, 但是也有可能这些响应头
是由后端开发人员进行自定义的!
而且这里的响应头
跟请消头
很类似, 格式也基本一样, 它的格式为 name:value
具体我这里也列举了一些常见的响应头
如下表:
响应头 | 含义 |
---|---|
Server |
HTTP服务器的软件信息 |
Date |
响应报文的时间, 要注意返回时间的时区 |
Expiros |
服务器指定的一个缓存过期时间 |
Set-Cookie |
设置Cookie, 也就是服务器 返回的一段文本给客户端 ,让客户端 保存好,下次请求就把这个cookie 文本带上! |
Last-Modified |
资源最后修改时间 ,也就是客户端有缓冲的文档并发出了一个条件性的请求, 服务器告诉客户,原来缓冲的文档还可以继续使用, 也就是说不用在从服务器中进行返回 |
Content-Type |
服务器 返回给客户端 的响应类型和编码字符集例如:Content-Type:text/html;charset=utf-8 |
Content-Length |
内容长度, 也就是服务器 返回给客户端 返回的内容是多少字节 |
Connection |
例如Keep-Alive ,表示保持tcp链接不会关闭 ,当然它不会永久保持链接,我们在服务器端中是可以设置的 |
Location |
指明服务器 给客户端 重定向的位置,也就是新的URL地址 如:304的情况 |
… |
还有更多的响应头
这里就不一一列举了!
3.空白行
空白行
也就是http
规范制定的必须存在的一个空行
, 空行的目的就是一种格式,也就是要告诉用户接下来的内容就是正文内容了!
4.响应体
响应体
也就是实际从服务器
返回给客户端
的正文内容,也可能是一些字符串, 也可以是任意的格式:
响应体
大多数情况下都是html、json、文本、xml
这些格式!
小结
对于http
相关的的知识点 就说这么多了,对于学习fiddler
足够了
接下来你就可以愉快的学习Fiddler
了🤗
Fiddler运行原理
Fiddler
的原理简单点说就是通过改写HTTP代理
然后让网络数据
从Fiddler
这边通过 这样子来监控并且截取到网络信息数据。当你打开Fiddler
的时候, 就已经设置好了浏览器的代理了。当你关闭的时候,它会自动的帮你把代理还原
之前也说过了 B/S
架构就是客户端
和服务器
之间的 请求和响应
, 刚刚我们也知道了Fiddler
通过代理
的形式来进行监听,它在请求和响应
中起到一个什么样的角色呢?
这里还要清楚一点的就是 浏览器
默认走的是我们的系统代理
其实这里的代理监听
就是在 请求和响应
之间插了一脚, 让fiddler
成为系统代理
在你安装好Fiddler
之后启动,并可以打开菜单栏中的Tools--->options--->Connections
如下图
看到了吧,这里有一句Act as system proxy on startup
意思就是(在启动时充当系统代理)
,并且默认监听端口设置为了8888
如图
这里以chrome浏览器
为例:
只要fiddler
一旦启动并开始监听
的时候,就会默认成为系统代理
, 所以你的网络请求 也就会被fiddler
所抓取到!
如图
或者如下图一样Fiddler
就是一个中间的proxy(代理服务器)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ItS8dJ6N-1651910920350)(img/fiddler_3-3.png)]
当关闭fiddler
的时候,手动设置代理
选项就会被清空
所以我们才会说Fiddler
是介于客户端
和服务器
中间的一个角色, 监控客户端
和服务器
所有通信的过程!
小结
Fiddler
是以代理WEB服务器
的形式工作的,浏览器与服务器
之间通过建立TCP连接以HTTP协议
进行通信,
浏览器默认通过自己发送HTTP请求
到服务器
,本地使用代理地址:127.0.0.1, 端口:8888
.
而当Fiddler
开启会自动设置系统代理
, 退出的时候它会自动注销代理
,这样就不会影响别的程序。
但是如果Fiddler
非正常退出,这时可能会因为Fiddler
没有自动注销,而会造成网页无法访问。
解决的办法是重新启动下Fiddler
就可以了, 这也是有很多新手安装了Fiddler
之后导致一些网络无法访问的原因之一!
Fiddler使用教程详解
Fiddler的配置
安装证书
fiddler
默认是只抓取http
协议, 如下图
总之以后如果会话列表
中的Host
列中出现Tunnel to...
字样都说明是证书
的问题, 这种就不能抓取到我们想要的会话
那么要抓取https
协议的会话需要打开配置安装证书
才可以,毕竟目前很多网站都是https
协议的, 所以在抓包之前,我们还要配置一下证书
否则无法抓包!
操作方法如下:
执行菜单栏中的:Tools---->Options---->HTTPS
然后勾选Decrypt HTTPS traffic(解密HTTPS流量)
然后会弹出一个对话框
直接点击YES
即可!
注意
你是第一次安装的Fiddler
那么正常情况下会弹出证书安装
的相关提示!
如果没有弹出提示,那么久勾选Actions---> Trust Root Certificate(信任根证书)
如图
接下来弹出这个对话框 全部点击是
即可
如图
然后弹出Added Fiddler's root certificate to the Machine Root list(将Fiddler的证书添加到机器根目录列表中)
点击确定
最后把下面的:
Ignore server certificate errors(unsafe)忽略服务器证书错误(不安全)
check for certificate revocation (证书撤销检查)
这两个选项也勾选上!
如图
那么现在证书
也已经安装到Fiddler
上了, 我们可以从Actions
中选择Open Windows Certificate Manager这一个选项, 打开打开Windows证书管理器
去查看
如图
打开打开Windows证书管理器
之后点击菜单栏上的 操作--->查找证书
然后输入Fiddler
就会查找出证书了
如果没有说明没有安装成功!
如图
证书名为DO_NOT_TRUST_FiddlerRoot
大家可以对照着看看!
信任证书
证书安装了之后 还要设置一下信任才行!
直接选择Tools--->Options---->HTTPS---->Actions--->Trust Root Certificate
如图
在接下来弹出的对话框中直接点击确定
或yes
就行了!
好了现在不出意外的话就可以进行正常的抓取HTTPS包
了
注意
如果还是不行,那么最好重置一下证书 在Actions
中选择Reset All Certificates(重置所有证书)
然后点击确定删除Fiddler
所配置的证书,最后重新执行之前的步骤就可以了!
如图
小提示
我们在Skip Decryption
中输入ip地址
或者域名
可以用来跳过
该主机
或域名
的https数据抓取
例如
Firefox 代理设置
如果你是Firefox 浏览器
那么一定要开启系统代理
或者手动设置代理
才能正常的抓包!
在Firefox
中的设置下找到网络设置
选择系统代理
或者手动设置代理
都可以!
如图
Firefox 证书设置
有些Firefox
的版本需要手动去安装一下证书,才可以正常的去抓取信息
首先我们可以从Fiddler
中手动的导出证书,操作如下
菜单栏选择Tools-->Options-->HTTPS-->Actions
选择Export Root Certificate to Desktop(将根证书导出到桌面)
如图
就会自动把根证书导出到电脑桌面
如图
然后把这个证书导入到FireFox浏览器
中去
在FireFox
中点击设置-->下面的隐藏与安全---->找到证书--->点击查看证书
如图
点击导入
选择刚刚从Fiddler
导出的证书
就可以了,这是针对比较老一点的FireFox浏览器
解密 HTTPS 流量的解决办法
如果已经安装了证书会提示已经存在!
Fiddler请求基本过滤
fiddler
默认上抓到的是我们web端
和移动端
所有的请求请求,如果web端
上打开了网页并且同时手机也在发送请求会话的时候, 那么这时候就需要开启过滤功能了!
我们通过Fiddler菜单栏
中的Tools--->Options-->HTTPS
修改..from all processes
这一项
如图
选项含义如下表:
选择项 | 描述 |
---|---|
from all processes |
抓所有进程所产生的请求会话 |
from browsers only |
只抓浏览器进程所产生的请求会话 |
from non-browsers only |
只抓非浏览器的请求 |
from remote clients only |
只抓远程客户端请求, 一般手机抓包会用! |
Fiddler中开启或关闭抓包功能
当你要Fiddler
抓数据包的时候, 只需要确保Capture Traffic
选项是开启就可以了具体操作如下:
在菜单栏选择File –> Capture Traffic
就可以了, 开启后再左下角状态栏
上会有Capturing
的字样显示!
如图
注意:再次点击了Capturing
就会关闭抓包,系统代理也会关闭
Fiddler核心功能分区
fiddler
大致分为5
个区域,分别为菜单栏、工具栏、会话监控列表、辅助选项卡、状态栏
如图
菜单栏
主要的功能其实很简单主要又包含file(文件)、edit(编辑)、Rules(规则)、 Tools(工具) 、View(视图) Help(帮助)
file菜单
主要包含新建视图、加载一个保存好的抓包会话文件、保存所有会话列表数据到一个.saz文件中
等等.
edit菜单
主要包含一些编辑的功能,例如对会话的:复制 粘贴 拷贝
等操作
Rules规则菜单
所谓规则
指的也就是抓包
的规则, 按照设置的一系列规则来显示抓取的数据会话常见勾选设置有:
Hide CONNECTs(把建立通道连接隐藏了)
的规则
Hide 304s(也就是304相关的会话也隐藏了)
的规则
Hide image Request (也就是隐藏和图片相关会话)
的规则
其他Rules规则菜单
中的规则选项大家可以自行尝试!
Tools(工具菜单)
这个菜单多数是针对fiddler
这款工具本身的一些网络设置
View(视图菜单)
这个菜单是针对fiddler
显示界面与视图的一些设置,如果有些工具栏和按钮没有显示,就可以在这里来查找!
Help(帮助菜单)
一些关于fiddler和网络
的帮助信息文档,有兴趣的可以去查查看!
工具栏
工具栏
上的快捷按钮,也是平常我们在抓包过程当中经常会使用到的,这里我列举一些常会用到的工具按钮
add a comment(添加评论备注按钮)
使用这个工具按钮你可以给某个会话添加一些描述或者备注
信息!
如图
Replay(重放请求按钮)
这个按钮的作用其实就是,重新发一次当前你所选择的会话请求
, 也就是说你点击一下Replay
就会通过Fiddler
来帮你发一次请求到服务器去!
也可以通过选择一个会话之后点击键盘上的R
键进行快速重放操作!
如图
如果你想一次性向某个会话发送n次请求, 那么可以先选择一个会话,然后按住shift+R
或者 按住shift+Replay按钮
或者shift + u
来输入一个请求的次数!
如图
这种操作可以对一些普通的基础服务器做一个压力测试, 也就相当于一个简单并发测试
Remove session(删除会话按钮)
删除会话按钮顾名思义就是用来删除列表中的会话, 它这个按钮内部包含了删除会话的一些过滤方法
比如:
1.Remove All(删除全部会话)
快捷键为ctrl+x
2.images (删除图片相关的请求会话)
3.connect (删除连接相关的请求会话)
4.Non-200s (删除非200状态的请求会话)
5.Non-Browser(删除非浏览器的请求会话)
等等…
当然删除会话的方法还有很多,比如你在会话列表
中选择了某几个会话想保留,其他会话全部删除
这种操作可以先按住ctrl
然后选择要保留的会话,然后再按下shift+delete
即可!
如图
当然也可以在会话列表
中选择某一个会话然后右键
选择Remove命令
来进行删除
selected Session (删除选择的会话)
Unselected Session (删除未选择的会话)
All Session (删除全部会话)
如图
当然也可以直接点击键盘上的delete
来进行删除会话!
Decode(解码按钮)
当把这个按钮点击上了之后,会对所有返回的请求会话进行解码
要知道http
有的时候返回的正文内容是被编码之后的,若要解码
全部会话中的响应报文
可以先把这个按钮点选上, 再抓包的时候响应报文就会自动解码
其中的正文内容!
如图
当然你也可以不用点选这个按钮,要解码那个会话,再选择会话的时候点击右边响应报文中的Response body is encoded click to decode(解码响应报文)
就可以了!
如图
Keep session (保持会话按钮)
这个按钮的功能可以帮你规定会话列表中最多能够保留多少个会话, 根据需求自己选择就可以了!
如图
Any Process(瞄准目标会话)
这个功能有点意思, 可以瞄准你想要抓取的对象
比如说: 我们现在要抓取一个ie浏览器
的请求数据包, 那么可以以下操作
如图
看到Process(进程)
了吧, 都是瞄准的ie浏览器
来进行抓取的请求!
Find(会话查找按钮)
find
按钮就是用来进行搜索和查找会话的, 我们可以根据一些条件快速定位到想要的会话
请求
它对应的快捷键为ctrl+f
如图
一些其他选项的含义如下表:
选项 | 描述 |
---|---|
Match case |
表示区分大小写 |
Regular Expression |
正则表达式 |
Search binaries |
搜索二进制文件 |
Decode compressed content |
解码压缩内容 |
Search only selected sessions |
只搜索选择的请求 |
Result Highlight |
搜索结果的强调颜色 |
Save(会话保存按钮)
这个按钮会把当前所有的会话
全部以一个.saz
的一个归档文件进行保存!
这样也方便发给其他的开发和测试人员观看, 这没什么好说的!
照相机按钮
这个按钮就是单纯的截图,截图的时候会产生一个倒计时, 然后把截好的图片通过本地发送请求到localhost
, 也可以拷贝出来! 用处不是很大!
如图
Browse (浏览器按钮)
这个按钮的作用就是可以快速的打开当前电脑里已安装的浏览器
没什么太大特别的!
Clear Cache(清除缓存按钮)
这个按钮的作用就是清除缓存
, 注意它是清除的ie浏览器
的缓存
TextWizard(按钮)
这个按钮的功能可以让文本进行编码与解码
如图
会话列表 (Session list) 详解