Fiddler是一款免费的、基于Windows系统的代理服务器软件(即Web调试抓包工具),由Eric Lawrence用C#语言在2003年10月发布了第一个版本。注意,由于Fiddler依赖Microsoft .NET Framework 2.0或更高版本,因此在运行Fiddler之前需要预先将其安装。
  当启动Fiddler时,它会自动注册成Windows Internet(WinINET)网络服务代理,从而就能捕获本地所有的HTTP和HTTPS数据流。在图14中,客户端(例如Web浏览器、iOS移动设备等)会把请求交由Fiddler转发给服务器,服务器也会把响应交由Fiddler转发给客户端。在Fiddler介入后,就能实现过滤数据流、解密HTTPS、调试断点、修改请求或响应等功能。
:-: ![](https://img.kancloud.cn/e3/7d/e37deee5e27041936bb15c8b1bff0eee_1187x476.png =400x)
图14 Fiddler的工作原理
## 一、用户界面
  Fiddler的用户界面包含6块区域:主菜单栏(1)、工具栏(2)、会话列表(3)、选项视图(4)、命令行工具QuickExec(5)和状态栏(6),如图15所示。
:-: ![](https://img.kancloud.cn/5d/7f/5d7f9892d3ff67c16eccc19a2d8c05ef_600x335.jpg =600x)
图15 Fiddler的用户界面
**1)主菜单栏**
  Fiddler的主菜单包含6部分(如下所列),几乎囊括了Fiddler的所有功能,并且利用FiddlerScript或Extensions可扩展菜单系统。
  (1)File:启动和关闭流量的捕获,加载流量文件,保存捕获的流量并支持多种格式(例如SAZ、BAT、MS等)的导出。
  (2)Edit:作用于会话列表中的会话(Session),包括复制、移除、全选、标记、搜索等操作。
  (3)Rules:由FiddlerScript文件生成的规则,包括过滤图像类会话、提供影响Web性能的选项、替换User-Agent请求首部等。
  (4)Tools:提供了控制Fiddler行为的全局配置选项、对文本进行编码和解码的TextWizard(如图16所示)、主机重映射(Host Remapping)工具(如图17所示)等。
  (5)View:视图管理器,既能刷新部分选项卡中的内容,也能重置Fiddler的用户界面,例如显示或隐藏Statistics、Inspectors等选项卡。
  (6)Help:不仅提供了多条链接,可跳转到网上论坛、在线文档等页面,还能检查是否是最新版本以及显示当前版本的基本信息。
:-: ![](https://img.kancloud.cn/ac/73/ac735c106b7a2a3f841efa8ac8270f9b_1660x574.png =600x)
图16 TextWizard
:-: ![](https://img.kancloud.cn/42/33/4233b7bc23229af053e8675cd5eba4c6_601x296.png =400x)
图17 Host Remapping
**2)工具栏**
  Fiddler的工具栏提供了常见命令的按钮以及预定义的快捷方式(如图18所示),例如重发请求、移除断点、保存会话、清除WinINET缓存、指示系统是否在线等。
:-: ![](https://img.kancloud.cn/5f/71/5f71f26e1a1d0dd522202eb7f4ac55c7_1058x88.png =600x)
图18 工具栏
  当把鼠标悬停在某个按钮上时,会显示一条描述其功能的提示信息,如图19所示。
:-: ![](https://img.kancloud.cn/a8/d0/a8d0668466f1449fccd60c8c2eb59e16_545x183.png =400x)
图19 按钮的提示信息
**3)会话列表**
  Web会话记录了客户端和服务器之间的一系列交互,一个会话就是一个事务,由一条请求命令和一个响应结果组成。在Fiddler的会话列表中,每个条目代表一个会话,包含一段重要的摘要信息,如图20所示。
:-: ![](https://img.kancloud.cn/6d/b4/6db4eb9879549e539aaeac599bc63f40_2028x352.png =600x)
图20 会话列表中的摘要信息
  关于每列的描述可参考表5。
:-: ![](https://img.kancloud.cn/91/40/9140b65b8168352c712059ffd893842b_600x591.png)
表5 列包含的信息
  表中的图标包括三类:会话进度、请求类型和响应类型。以图20的首末两个会话中的图标为例,第一个表示加密的HTTPS数据流,最后一个表示响应是个图像文件。
**4)选项视图**
  Fiddler的选项视图默认有9个选项卡(如图21所示),其中Log选项卡收集日志信息,Fiddler Orchestra Beta选项卡提供远程Web调试的功能,其余选项卡将在后文做单独讲解。
:-: ![](https://img.kancloud.cn/43/38/4338f19a7f08017842085a2fe81b50ac_825x84.png =600x)
图21 默认的选项卡
**5)QuickExec**
  Fiddler的[QuickExec](https://www.fiddlerbook.com/fiddler/help/quickexec.asp)允许用户快速启动脚本命令,大致分为三类:选择数据流、FiddlerScript命令和其它,表6挑选了几个常用的命令。
:-: ![](https://img.kancloud.cn/b5/08/b508fd56d731fb417de749b819a6462f_1282x731.png)
表6 QuickExec中的命令
  QuickExec还提供了多组快捷键(即热键),表7挑选了几组常用的快捷键。
:-: ![](https://img.kancloud.cn/70/37/7037653531ad1f3bc9047272692b9213_600x582.png)
表7 QuickExec中的快捷键
**6)状态栏**
  Fiddler的状态栏处于用户界面的最下方,显示了5项配置信息(如图22所示),从左往右的作用依次为:
:-: ![](https://img.kancloud.cn/8a/34/8a34ce9d96d051c6f230e16e29e66ecd_839x43.png =600x)
图22 状态栏
  (1)是否让Fiddler成为系统代理。
  (2)根据选择的进程类型过滤数据流。
  (3)断点影响的会话类型,包括全部请求、全部响应和无。
  (4)选中的会话数和总会话数。
  (5)选中会话的URL,如果选中了多个,那么只显示第一个。
## 二、Web调试
  Fiddler能够调试来自于桌面浏览器和移动设备的数据流。
**1)代理设置**
  在Windows上运行的大部分浏览器(例如IE、Chrome等),其数据流都能被Fiddler直接捕获,而其余浏览器要么需要安装插件,要么需要单独配置。
  如果要在iOS或Android设备上捕获数据流,那么首先需要配置Fiddler的Tools菜单中的Options,使其允许远程连接,注意看图23用粗线框出的选项。
:-: ![](https://img.kancloud.cn/f7/75/f775c860a54a5f4174fd86345a75bb9d_1272x738.png =500x)
图23 Fiddler允许远程连接
  然后让移动设备与Fiddler处于同一网段(例如连上相同的Wi-Fi),并修改其WLAN设置,如图24所示,其中服务器就是Fiddler所在电脑的IP地址,而端口就是Fiddler默认的工作端口号。
:-: ![](https://img.kancloud.cn/2f/8e/2f8e262a40bf3e489adf420241c4307f_554x281.png =300x)
图24 设置代理服务器地址和端口号
**2)解密HTTPS**
  HTTPS是HTTP的安全版本,如果要让Fiddler将其捕获,那么需要先在Options的HTTPS选项卡中勾选“Decrypt HTTPS traffic”,允许解析HTTPS的请求和响应,如图25用粗线框出的选项。
:-: ![](https://img.kancloud.cn/f0/74/f07496b570f90807ec10bf6e67bfda3a_1272x738.png =500x)
图25 Fiddler允许解析HTTPS
  当第一次勾选时,Fiddler会生成一张自签名的证书,并且需要确认是否信任它,如图26所示。
:-: ![](https://img.kancloud.cn/3b/01/3b01c34dbf9a8af04aa147109eaea18d_456x202.png =300x)
图26 信任Fiddler证书
  在信任该证书后,就需要将其安装,如图27所示。
:-: ![](https://img.kancloud.cn/72/19/7219a179c5b74668f0d547331d8872ca_490x442.png =400x)
图27 安装Fiddler证书
  如果要让Fiddler能够捕获移动设备的HTTPS流量,那么还需要额外几步。首先打开设备的浏览器,在地址栏中输入代理服务器的IP和Fiddler的工作端口,得到下载证书的页面,如图28所示,图中用粗线框出的就是下载地址。
:-: ![](https://img.kancloud.cn/ae/31/ae31a1b23d2f5fab2aa8f9c1ac106b0a_1625x754.png =600x)
图28 下载Fiddler证书
  然后将下载的Fiddler证书安装到当前设备中,从而就能在Fiddler中查看到HTTPS数据流了。
**3)会话数据**
  在Inspectors选项卡中,请求信息在面板顶部,响应结果在面板底部,如图29所示。
:-: ![](https://img.kancloud.cn/1a/87/1a87c1710b621b05d3f246ff36188d18_903x501.png =600x)
图29 Inspectors选项卡
  请求和响应都包含的子选项卡如下所列。
  (1)Headers:请求和响应的首部。
  (2)TextView:查看文本格式的请求和响应内容。
  (3)SyntaxView:查看语法高亮的请求和响应内容。
  (4)HexView:以十六进制的形式显示首部和内容。
  (5)Auth:请求和响应的授权和认证。
  (6)Cookies:发送和接收到的Cookie信息。
  (7)Raw:查看文本格式的请求和响应。
  (8)JSON:将请求和响应的内容解析成JSON格式的字符串。
  (9)XML:将请求和响应的内容解析成XML格式的字符串。
  其余子选项卡的作用如下所列。
  (1)WebForms:解析请求的查询字符串。
  (2)Transformer:设置响应内容的编码类型。
  (3)ImageView:以图像形式显示响应内容。
  (4)WebView:预览Web浏览器中显示的响应结果。
  (5)Caching:响应的缓存信息。
**4)AutoResponder**
  Fiddler的AutoResponder选项卡提供了一个强大的功能,它能创建请求规则,并在匹配成功时,替换响应结果。
  在图30中,包含了一组控制AutoResponder行为的选项,只有勾选了“Enable rules”才能激活当前选项卡,在勾选“Unmatched requests passthrough”后,就能让匹配失败的请求发送到原来的服务器中,而不是返回“404 Not Found”的响应。选项卡的中心区域就是规则集合,其中第一列是匹配条件,第二列是匹配成功后所执行的动作。
:-: ![](https://img.kancloud.cn/06/09/0609da9039c1073ff039739875270b2b_571x168.png =500x)
图30 行为选项和规则集合
  图31是编辑规则的区域,第一个可写的选择框用于定义规则(即匹配条件),第二个用来指定重定向的本地文件、延迟返回响应结果等各类行为。
:-: ![](https://img.kancloud.cn/3b/5a/3b5a560acfc1ff9bbfbc79a75d737ca9_681x79.png =600x)
图31 编辑规则
  每个匹配条件都会包含一个前缀,可供选择的前缀有NOT、EXACT和REGEX。其中NOT会忽略给定字符串的请求,EXACT会精确匹配给定字符串,REGEX会指定一段正则表达式,通过.NET正则表达式引擎来匹配。
**5)发送请求**
  Fiddler的Composer选项卡(如图32所示)支持发送一条或多条请求,它能编辑请求的方法、首部、内容和URL等部分,其中URL需要包含http://、https://等协议,不仅如此,还能上传文件。
:-: ![](https://img.kancloud.cn/11/b0/11b0f0bf39db9c7d8be7951273713c79_898x570.png =600x)
图32 Composer选项卡
**6)过滤流量**
  Fiddler的Filters选项卡提供了7组过滤选项,包括主机、客户端进程、请求首部、断点、响应状态码、响应类型和大小以及响应首部,如图33所示。
:-: ![](https://img.kancloud.cn/bf/48/bf48223526b073b5f849c320d813a035_515x775.png =400x)
图33 Filters选项卡
  Filters选项卡可用来修改Cookie、模拟跨域、过滤二级域名的会话、捕获远程进程等。
**7)设置断点**
  Fiddler包含两种断点,分别是请求断点和响应断点。它们中断的时刻不同,前者是请求已发送,但还未到服务器;后者是响应已返回,但还未到客户端。
  在图34中,用粗线框出的“Before Requests”和“After Responses”可分别设置全局的请求断点和响应断点,利用Filters和AutoResponder可过滤掉无用的会话,从而能更精确地定位断点。
:-: ![](https://img.kancloud.cn/a9/9c/a99cc6719bc637e3500cd2a4b0554328_926x469.png =400x)
图34 设置断点
  当执行断点时,可在Inspectors中编辑请求或响应(例如修改URL、首部、内容、查询字符串等),并且所做的变更会被自动提交。而在Inspectors的中间位置(即请求和响应之间)还会出现一个断点栏,如图35所示,包含两个按钮和一个选择框。
:-: ![](https://img.kancloud.cn/a1/bf/a1bfa6dbd644522ae5eaeabf12e56f4d_1301x47.png =600x)
图35 断点栏
  第一个“Break on Response”按钮会为当前会话设置响应断点;第二个“Run to Completion”按钮会继续执行会话并且不再设置断点;选择框用来配置响应结果,提供了多套特定模板以及上传文件的入口。
  如果在QuickExec中输入g命令后,那么就会移除所有断点,恢复会话的执行。
## 三、性能测试
  在Fiddler中,不仅能清晰的看到页面权重、缓存信息、压缩情况等数据,还能配置各种规则来隔离性能瓶颈。
**1)分析会话性能**
  在Statistics选项卡中,记录了处理会话所花费的各项参数的时间,而利用这些数据就可以分析出会话的性能问题,表8列出了各个性能参数的具体说明。
:-: ![](https://img.kancloud.cn/6f/d6/6fd67fb9867de87bfd7a8647d05eb6a3_1697x1598.png)
表8 性能参数
  点击下方的“Show Chart”会出现一张饼图,其切片是各个MIME类型以及数据流首部的字节数,如图36所示。
:-: ![](https://img.kancloud.cn/d0/08/d0083a8a88a772d3e696a927decf4de0_268x267.png =200x)
图36 字节饼图
**2)分析瀑布图**
  选中一个或多个会话后,可在Timeline选项卡中看到数据流的瀑布图,如图37所示。
:-: ![](https://img.kancloud.cn/36/e7/36e7212ced3838523804772df81717c1_555x125.png =600x)
图37 瀑布图
  默认采用时间轴模式,即横轴表示时间,纵轴表示文件名,线条栏表示会话。当鼠标悬在线条栏上时,在下方的状态栏会显示该会话的更多信息。
  条形栏会在ClientBeginRequest时刻开始绘制,然后在ClientDoneResponse时刻结束绘制。条形栏会根据响应的MIME类型着色,其中亮绿色是图像、军绿色是JavaScript、紫色是CSS、蓝色是其它文件。条形栏中的黑色竖线表示ServerBeginResponse的时间。
  条形栏前面有两个圆圈,上方表示客户端与Fiddler之间的连接,下方表示Fiddler与服务器之间的连接,而它们都包含两种颜色,绿色表示复用连接,红色表示新建连接。条形栏后面的红色X图标表示服务器返回的响应首部中包含“Connection:close”,会阻止后续请求复用该连接。
**3)模拟HTTP压缩**
  HTTP规范提供了两种提高性能的编码方式:压缩(Compression)和分块传输编码(Chunked Transfer-Encoding),而在Inspectors选项卡的Transformer中可以设置这两种编码方式,如图38所示。
:-: ![](https://img.kancloud.cn/79/5c/795ce420a71a25e60b9cec6bfffcca33_425x236.png =300x)
图38 默认的Transformer
  Fiddler提供了4种压缩算法:GZIP、DEFLATE、BZIP2和Brotli。每当选中某个算法或复选框时,“Response Body”的字节数就会改变,有时在“HTTP Compression”的下方还会有简短的信息提示,从而就能对比使用Transformer前后的差异。图39和图38应用的是同一个响应,在选中GZIP压缩算法后,响应内容的字节数明显降低了很多。
:-: ![](https://img.kancloud.cn/27/99/2799a97177915760922cb2f0b81afe93_425x266.png =300x)
图39 选中GZIP压缩算法后的Transformer
## 四、扩展
  Fiddler提供了多样化的扩展模型,包括FiddlerScript、.NET开发、FiddlerCore以及第三方插件。
**1)FiddlerScript**
  FiddlerScript既能扩展Fiddler的菜单(例如Tools、Rules等),也能过滤或修改会话。Fiddler在处理每个会话时,都会执行CustomRules.js中的方法,而在FiddlerScript选项卡中能编辑该脚本文件,如图40所示。
:-: ![](https://img.kancloud.cn/97/89/9789f233a118e2f125f403ee98eb52fb_641x264.png =600x)
图40 FiddlerScript选项卡
  Fiddler在上图的Handlers类中保留了多个静态函数(例如OnPeekAtResponseHeaders、OnBeforeResponse等),它的参数就是当前会话,可以在其内添加自定义的逻辑。Fiddler还提供了多个工具函数和属性,用来完成一些常见任务,例如在状态栏上设置文本,播放音频文件等。
**2).NET扩展Fiddler**
  在Fiddler中,还可以通过.NET框架支持的语言(例如C#、VB.NET等)来进行扩展。.NET构建的扩展无需修改FiddlerScript中的脚本文件,只要安装到电脑中就能使用,并且在控制面板中就能卸载。
  由于FiddlerScript构建的扩展,在Fiddler启动时需要重新编译,而.NET构建的扩展并不会这样,因此后者的加载速度和运行时性能都要好很多,但与此同时,其开发复杂度也会上升很多。
**3)FiddlerCore**
  FiddlerCore是一个.NET类库,可以集成到.NET应用程序中,只提供了Fiddler的代理功能,可用来捕获、过滤或修改HTTP和HTTPS流量,而不必借助Fiddler UI,像自动化测试这类情况就很适合使用FiddlerCore。在图41中,左边是包含扩展的Fiddler应用,右边是集成FiddlerCore的用户应用。
:-: ![](https://img.kancloud.cn/e7/b4/e7b429487b92e6cfa869a39508625dd5_549x248.png =600x)
图41 Fiddler.exe VS YourApp.exe
**4)功能插件**
  Fiddler官方和独立开发者们提供了丰富的[功能插件](https://www.telerik.com/fiddler/add-ons)(即附加组件),可大大提升Fiddler的可用性和测试性,在下面的地址中列出了部分扩展。接下来会通过一个例子来说明Fiddler插件的用法。
~~~
https://www.telerik.com/fiddler/add-ons
~~~
  目前很多网站都会对自己的JavaScript文件进行压缩(如图42所示),如果要在Fiddler中查看这类脚本,那么就得使用JavaScript Formatter插件,它能将压缩代码格式化,使之可读。
:-: ![](https://img.kancloud.cn/e2/70/e27065aed9d3a58fd374e355e6691ee0_861x209.png =600x)
图42 压缩后的脚本
  首先从官网上下载它的安装包,安装成功后再重启Fiddler,然后在会话列表中右击想要查看的JavaScript文件,得到图43所示的上下文菜单,选择用粗线框出的选项。
:-: ![](https://img.kancloud.cn/6c/0a/6c0a2d2a1f5d8bb5ff7a661dffc9655d_374x119.png =300x)
图43 Make JavaScript Pretty
  此时在SyntaxView选项卡中就能查看到美化后的脚本了,如图44所示。
:-: ![](https://img.kancloud.cn/73/83/73839e460e8578ca015623deef62baa2_820x220.png =600x)
图44 美化后的脚本
*****
> 原文出处:
[博客园-前端利器躬行记](https://www.cnblogs.com/strick/category/1472499.html)
[知乎专栏-前端利器躬行记](https://zhuanlan.zhihu.com/pwtool)
已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎浏览。
![](https://box.kancloud.cn/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
推荐一款前端监控脚本:[shin-monitor](https://github.com/pwstrick/shin-monitor),不仅能监控前端的错误、通信、打印等行为,还能计算各类性能参数,包括 FMP、LCP、FP 等。
- ES6
- 1、let和const
- 2、扩展运算符和剩余参数
- 3、解构
- 4、模板字面量
- 5、对象字面量的扩展
- 6、Symbol
- 7、代码模块化
- 8、数字
- 9、字符串
- 10、正则表达式
- 11、对象
- 12、数组
- 13、类型化数组
- 14、函数
- 15、箭头函数和尾调用优化
- 16、Set
- 17、Map
- 18、迭代器
- 19、生成器
- 20、类
- 21、类的继承
- 22、Promise
- 23、Promise的静态方法和应用
- 24、代理和反射
- HTML
- 1、SVG
- 2、WebRTC基础实践
- 3、WebRTC视频通话
- 4、Web音视频基础
- CSS进阶
- 1、CSS基础拾遗
- 2、伪类和伪元素
- 3、CSS属性拾遗
- 4、浮动形状
- 5、渐变
- 6、滤镜
- 7、合成
- 8、裁剪和遮罩
- 9、网格布局
- 10、CSS方法论
- 11、管理后台响应式改造
- React
- 1、函数式编程
- 2、JSX
- 3、组件
- 4、生命周期
- 5、React和DOM
- 6、事件
- 7、表单
- 8、样式
- 9、组件通信
- 10、高阶组件
- 11、Redux基础
- 12、Redux中间件
- 13、React Router
- 14、测试框架
- 15、React Hooks
- 16、React源码分析
- 利器
- 1、npm
- 2、Babel
- 3、webpack基础
- 4、webpack进阶
- 5、Git
- 6、Fiddler
- 7、自制脚手架
- 8、VSCode插件研发
- 9、WebView中的页面调试方法
- Vue.js
- 1、数据绑定
- 2、指令
- 3、样式和表单
- 4、组件
- 5、组件通信
- 6、内容分发
- 7、渲染函数和JSX
- 8、Vue Router
- 9、Vuex
- TypeScript
- 1、数据类型
- 2、接口
- 3、类
- 4、泛型
- 5、类型兼容性
- 6、高级类型
- 7、命名空间
- 8、装饰器
- Node.js
- 1、Buffer、流和EventEmitter
- 2、文件系统和网络
- 3、命令行工具
- 4、自建前端监控系统
- 5、定时任务的调试
- 6、自制短链系统
- 7、定时任务的进化史
- 8、通用接口
- 9、微前端实践
- 10、接口日志查询
- 11、E2E测试
- 12、BFF
- 13、MySQL归档
- 14、压力测试
- 15、活动规则引擎
- 16、活动配置化
- 17、UmiJS版本升级
- 18、半吊子的可视化搭建系统
- 19、KOA源码分析(上)
- 20、KOA源码分析(下)
- 21、花10分钟入门Node.js
- 22、Node环境升级日志
- 23、Worker threads
- 24、低代码
- 25、Web自动化测试
- 26、接口拦截和页面回放实验
- 27、接口管理
- 28、Cypress自动化测试实践
- 29、基于Electron的开播助手
- Node.js精进
- 1、模块化
- 2、异步编程
- 3、流
- 4、事件触发器
- 5、HTTP
- 6、文件
- 7、日志
- 8、错误处理
- 9、性能监控(上)
- 10、性能监控(下)
- 11、Socket.IO
- 12、ElasticSearch
- 监控系统
- 1、SDK
- 2、存储和分析
- 3、性能监控
- 4、内存泄漏
- 5、小程序
- 6、较长的白屏时间
- 7、页面奔溃
- 8、shin-monitor源码分析
- 前端性能精进
- 1、优化方法论之测量
- 2、优化方法论之分析
- 3、浏览器之图像
- 4、浏览器之呈现
- 5、浏览器之JavaScript
- 6、网络
- 7、构建
- 前端体验优化
- 1、概述
- 2、基建
- 3、后端
- 4、数据
- 5、后台
- Web优化
- 1、CSS优化
- 2、JavaScript优化
- 3、图像和网络
- 4、用户体验和工具
- 5、网站优化
- 6、优化闭环实践
- 数据结构与算法
- 1、链表
- 2、栈、队列、散列表和位运算
- 3、二叉树
- 4、二分查找
- 5、回溯算法
- 6、贪心算法
- 7、分治算法
- 8、动态规划
- 程序员之路
- 大学
- 2011年
- 2012年
- 2013年
- 2014年
- 项目反思
- 前端基础学习分享
- 2015年
- 再一次项目反思
- 然并卵
- PC网站CSS分享
- 2016年
- 制造自己的榫卯
- PrimusUI
- 2017年
- 工匠精神
- 2018年
- 2019年
- 前端学习之路分享
- 2020年
- 2021年
- 2022年
- 2023年
- 日志
- 2020