前端利器躬行记(6)——Fiddler

  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、调试断点、修改请求或响应等功能。

图14  Fiddler的工作原理

一、用户界面

  Fiddler的用户界面包含6块区域:主菜单栏(1)、工具栏(2)、会话列表(3)、选项视图(4)、命令行工具QuickExec(5)和状态栏(6),如图15所示。

图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:不仅提供了多条链接,可跳转到网上论坛、在线文档等页面,还能检查是否是最新版本以及显示当前版本的基本信息。

图16  TextWizard

图17  Host Remapping

2)工具栏

  Fiddler的工具栏提供了常见命令的按钮以及预定义的快捷方式(如图18所示),例如重发请求、移除断点、保存会话、清除WinINET缓存、指示系统是否在线等。

图18  工具栏

  当把鼠标悬停在某个按钮上时,会显示一条描述其功能的提示信息,如图19所示。

图19  按钮的提示信息

3)会话列表

  Web会话记录了客户端和服务器之间的一系列交互,一个会话就是一个事务,由一条请求命令和一个响应结果组成。在Fiddler的会话列表中,每个条目代表一个会话,包含一段重要的摘要信息,如图20所示。

图20  会话列表中的摘要信息

  关于每列的描述可参考表5。

表5  列包含的信息

列名描述
#图标和递增的唯一ID
Result响应状态码,例如404、302等
Protocol协议,例如HTTP、HTTPS和FTP
Host域名和端口号
URL路径、文件和查询字符串
Body响应包含的字节数
Caching响应中的两个首部Cache-Control和Expires的值
Content-Type响应中的Content-Type首部的值
Process发起本次请求的本地Windows进程
Comments通过脚本或会话列表中右键(即上下文菜单)添加的注释
Custom通过脚本设置的文本字段

  表中的图标包括三类:会话进度、请求类型和响应类型。以图20的首末两个会话中的图标为例,第一个表示加密的HTTPS数据流,最后一个表示响应是个图像文件。

4)选项视图

   Fiddler的选项视图默认有9个选项卡(如图21所示),其中Log选项卡收集日志信息,Fiddler Orchestra Beta选项卡提供远程Web调试的功能,其余选项卡将在后文做单独讲解。

图21  默认的选项卡

5)QuickExec

  Fiddler的QuickExec允许用户快速启动脚本命令,大致分为三类:选择数据流、FiddlerScript命令和其它,表6挑选了几个常用的命令。

表6  QuickExec中的命令

命令描述
?searchtext搜索URL中包含指定文本的会话,搜索结果会被高亮
=status选中指定状态码的会话
@host选中包含指定主机的域名或IP地址的会话
cls清空会话列表
g恢复所有被断点暂停的会话
bpu urltext当会话的URL包含指定文本时,会为其创建请求断点;而当没有urltext参数时,取消该断点
bpafter urltext当会话的URL包含指定文本时,会为其创建响应断点;而当没有urltext参数时,取消该断点
!dns hostname为目标主机执行DNS查询,在Log选项卡中显示结果
toolbar显示工具栏

  QuickExec还提供了多组快捷键(即热键),表7挑选了几组常用的快捷键。

表7  QuickExec中的快捷键

快捷键描述
ALT+Q光标聚焦到QuickExec
CTRL+R打开FiddlerScript编辑器
CTRL+E打开TextWizard
CTRL+Down选择下一个会话
CTRL+Up选择上一个会话
CTRL+T激活Inspectors的子选项卡TextView
CTRL+H激活Inspectors的子选项卡Headers
CTRL+M最小化Fiddler
CTRL+SHIFT+DEL清除WinINET缓存

6)状态栏

  Fiddler的状态栏处于用户界面的最下方,显示了5项配置信息(如图22所示),从左往右的作用依次为:

图22  状态栏

(1)是否让Fiddler成为系统代理。

(2)根据选择的进程类型过滤数据流。

(3)断点影响的会话类型,包括全部请求、全部响应和无。

(4)选中的会话数和总会话数。

(5)选中会话的URL,如果选中了多个,那么只显示第一个。

二、Web调试

  Fiddler能够调试来自于桌面浏览器和移动设备的数据流。

1)代理设置

  在Windows上运行的大部分浏览器(例如IE、Chrome等),其数据流都能被Fiddler直接捕获,而其余浏览器要么需要安装插件,要么需要单独配置。

  如果要在iOS或Android设备上捕获数据流,那么首先需要配置Fiddler的Tools菜单中的Options,使其允许远程连接,注意看图23用粗线框出的选项。

图23  Fiddler允许远程连接

  然后让移动设备与Fiddler处于同一网段(例如连上相同的Wi-Fi),并修改其WLAN设置,如图24所示,其中服务器就是Fiddler所在电脑的IP地址,而端口就是Fiddler默认的工作端口号。

图24  设置代理服务器地址和端口号

2)解密HTTPS

  HTTPS是HTTP的安全版本,如果要让Fiddler将其捕获,那么需要先在Options的HTTPS选项卡中勾选“Decrypt HTTPS traffic”,允许解析HTTPS的请求和响应,如图25用粗线框出的选项。

图25  Fiddler允许解析HTTPS

  当第一次勾选时,Fiddler会生成一张自签名的证书,并且需要确认是否信任它,如图26所示。

图26  信任Fiddler证书

  在信任该证书后,就需要将其安装,如图27所示。

图27  安装Fiddler证书

  如果要让Fiddler能够捕获移动设备的HTTPS流量,那么还需要额外几步。首先打开设备的浏览器,在地址栏中输入代理服务器的IP和Fiddler的工作端口,得到下载证书的页面,如图28所示,图中用粗线框出的就是下载地址。

图28  下载Fiddler证书

  然后将下载的Fiddler证书安装到当前设备中,从而就能在Fiddler中查看到HTTPS数据流了。

3)会话数据

  在Inspectors选项卡中,请求信息在面板顶部,响应结果在面板底部,如图29所示。

图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”的响应。选项卡的中心区域就是规则集合,其中第一列是匹配条件,第二列是匹配成功后所执行的动作。

图30  行为选项和规则集合

  图31是编辑规则的区域,第一个可写的选择框用于定义规则(即匹配条件),第二个用来指定重定向的本地文件、延迟返回响应结果等各类行为。

图31  编辑规则

  每个匹配条件都会包含一个前缀,可供选择的前缀有NOT、EXACT和REGEX。其中NOT会忽略给定字符串的请求,EXACT会精确匹配给定字符串,REGEX会指定一段正则表达式,通过.NET正则表达式引擎来匹配。

5)发送请求

  Fiddler的Composer选项卡(如图32所示)支持发送一条或多条请求,它能编辑请求的方法、首部、内容和URL等部分,其中URL需要包含http://、https://等协议,不仅如此,还能上传文件。

图32  Composer选项卡

6)过滤流量

  Fiddler的Filters选项卡提供了7组过滤选项,包括主机、客户端进程、请求首部、断点、响应状态码、响应类型和大小以及响应首部,如图33所示。

图33  Filters选项卡

  Filters选项卡可用来修改Cookie、模拟跨域、过滤二级域名的会话、捕获远程进程等。

7)设置断点

  Fiddler包含两种断点,分别是请求断点和响应断点。它们中断的时刻不同,前者是请求已发送,但还未到服务器;后者是响应已返回,但还未到客户端。

  在图34中,用粗线框出的“Before Requests”和“After Responses”可分别设置全局的请求断点和响应断点,利用Filters和AutoResponder可过滤掉无用的会话,从而能更精确地定位断点。

图34  设置断点

  当执行断点时,可在Inspectors中编辑请求或响应(例如修改URL、首部、内容、查询字符串等),并且所做的变更会被自动提交。而在Inspectors的中间位置(即请求和响应之间)还会出现一个断点栏,如图35所示,包含两个按钮和一个选择框。

图35  断点栏

  第一个“Break on Response”按钮会为当前会话设置响应断点;第二个“Run to Completion”按钮会继续执行会话并且不再设置断点;选择框用来配置响应结果,提供了多套特定模板以及上传文件的入口。

  如果在QuickExec中输入g命令后,那么就会移除所有断点,恢复会话的执行。

三、性能测试

  在Fiddler中,不仅能清晰的看到页面权重、缓存信息、压缩情况等数据,还能配置各种规则来隔离性能瓶颈。

1)分析会话性能

  在Statistics选项卡中,记录了处理会话所花费的各项参数的时间,而利用这些数据就可以分析出会话的性能问题,表8列出了各个性能参数的具体说明。

表8  性能参数

参数名描述
Request Count选中的会话数
Bytes Sent发送的字节数
Bytes Received接收的字节数
ClientConnected客户端第一次和Fiddler建立连接的时间
ClientBeginRequest客户端开始向Fiddler发送请求的时间
GotRequestHeadersFiddler从客户端接收完请求首部的时间
ClientDoneRequestFiddler从客户端接收完整个请求的时间
Determine Gateway确定使用哪个网关代理所花费的毫秒数
DNS Lookup解析DNS所花费的毫秒数。由于DNS存在缓存,因此除了第一次,其余时候该值都是0
TCP/IP Connect建立TCP/IP连接所花费的毫秒数
HTTPS Handshake在HTTPS握手中所花费的毫秒数
ServerConnected和服务器或上游网关代理建立TCP/IP连接的时间
FiddlerBeginRequestFiddler开始向服务器发送请求的时间
ServerGotRequestFiddler向服务器发送完请求的时间
ServerBeginResponseFiddler接收服务器响应的第一个字节的时间
GotResponseHeadersFiddler从服务器接收完响应首部的时间
ServerDoneResponseFiddler从服务器接收完整个响应的时间
ClientBeginResponseFiddler开始向客户端发送响应的时间
ClientDoneResponseFiddler向客户端发送完响应的时间
Overall Elapsed花费的总时间
Estimated Worldwide Performance在不同的地区和连接方式下所花费的时间,注意,由于实际网络会受很多因素的影响,因此该估值可能不准确

  点击下方的“Show Chart”会出现一张饼图,其切片是各个MIME类型以及数据流首部的字节数,如图36所示。

图36  字节饼图

2)分析瀑布图

  选中一个或多个会话后,可在Timeline选项卡中看到数据流的瀑布图,如图37所示。

图37  瀑布图

  默认采用时间轴模式,即横轴表示时间,纵轴表示文件名,线条栏表示会话。当鼠标悬在线条栏上时,在下方的状态栏会显示该会话的更多信息。

  条形栏会在ClientBeginRequest时刻开始绘制,然后在ClientDoneResponse时刻结束绘制。条形栏会根据响应的MIME类型着色,其中亮绿色是图像、军绿色是JavaScript、紫色是CSS、蓝色是其它文件。条形栏中的黑色竖线表示ServerBeginResponse的时间。

  条形栏前面有两个圆圈,上方表示客户端与Fiddler之间的连接,下方表示Fiddler与服务器之间的连接,而它们都包含两种颜色,绿色表示复用连接,红色表示新建连接。条形栏后面的红色X图标表示服务器返回的响应首部中包含“Connection:close”,会阻止后续请求复用该连接。

3)模拟HTTP压缩

  HTTP规范提供了两种提高性能的编码方式:压缩(Compression)和分块传输编码(Chunked Transfer-Encoding),而在Inspectors选项卡的Transformer中可以设置这两种编码方式,如图38所示。

图38  默认的Transformer

  Fiddler提供了4种压缩算法:GZIP、DEFLATE、BZIP2和Brotli。每当选中某个算法或复选框时,“Response Body”的字节数就会改变,有时在“HTTP Compression”的下方还会有简短的信息提示,从而就能对比使用Transformer前后的差异。图39和图38应用的是同一个响应,在选中GZIP压缩算法后,响应内容的字节数明显降低了很多。

图39  选中GZIP压缩算法后的Transformer

四、扩展

  Fiddler提供了多样化的扩展模型,包括FiddlerScript、.NET开发、FiddlerCore以及第三方插件。

1)FiddlerScript

  FiddlerScript既能扩展Fiddler的菜单(例如Tools、Rules等),也能过滤或修改会话。Fiddler在处理每个会话时,都会执行CustomRules.js中的方法,而在FiddlerScript选项卡中能编辑该脚本文件,如图40所示。

图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的用户应用。

图41  Fiddler.exe VS YourApp.exe

4)功能插件

  Fiddler官方和独立开发者们提供了丰富的功能插件(即附加组件),可大大提升Fiddler的可用性和测试性,在下面的地址中列出了部分扩展。接下来会通过一个例子来说明Fiddler插件的用法。

https://www.telerik.com/fiddler/add-ons

  目前很多网站都会对自己的JavaScript文件进行压缩(如图42所示),如果要在Fiddler中查看这类脚本,那么就得使用JavaScript Formatter插件,它能将压缩代码格式化,使之可读。

 图42  压缩后的脚本

  首先从官网上下载它的安装包,安装成功后再重启Fiddler,然后在会话列表中右击想要查看的JavaScript文件,得到图43所示的上下文菜单,选择用粗线框出的选项。 

图43  Make JavaScript Pretty

  此时在SyntaxView选项卡中就能查看到美化后的脚本了,如图44所示。

图44  美化后的脚本

 

转载于:https://www.cnblogs.com/strick/p/11188682.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值