本节书摘来自异步社区《Fiddler调试权威指南》一书中的第1章,第1.2节,作者:【美】Eric Lawrence著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.2 快速入门
1.2.1 基本概念
Fiddler是一款基于Windows系统的专用代理服务器软件。本地运行的程序,如Web浏览器、Office应用程序以及其他客户端应用,可以把HTTP和HTTPS请求发送给Fiddler,Fiddler通常把这些请求转发给Web服务器。然后,服务器把这些请求的响应返回给Fiddler,Fiddler再把这些响应转发给客户端。
几乎所有使用网络协议的程序都支持代理服务器,因此Fiddler几乎适用于所有应用。当启动Fiddler来捕获请求和响应时,Fiddler会自动注册为Windows Internet (WinINET)网络服务代理,并请求所有应用把请求发送给它,如图1-5所示。
图1-5
有些应用不会自动识别Windows网络配置,要想让Fiddler捕获其数据流,需要手工配置这些应用。也可以对Fiddler进行配置,使它能够支持更罕见的场景,包括服务器到服务器(如Web Services)和设备到服务器(如iPad或Windows手机)的数据流。默认情况下,Fiddler被设计成能够自动挂接到(chain to)先前已经部署的各种上游代理(upstream proxy),通过这种方式,Fiddler能够在已经使用了代理服务器的网络环境中正常工作。
Fiddler可以捕获所有的本地数据流,而且支持很多过滤器(filter)。这一特性使得用户既可以隐藏不感兴趣的数据流,也可以高亮显示(使用颜色或字体选项)感兴趣的数据流。过滤器的过滤条件可以是数据流的来源(如特定的客户端进程),也可以是数据流本身的某些特征(如该数据流所绑定的主机名或服务器返回内容的类型)。
Fiddler的扩展模型功能丰富,既有简单的FiddlerScript,也包含强大的功能插件(Extensions),这些扩展可以使用任意一种.NET语言来开发。Fiddler还支持几种特殊的扩展类型,其中最流行的是Inspector(稽查员)。顾名思义,Inspector的特点在于支持查看单个请求或响应。Inspector可以做成支持所有响应类型(如HexView Inspector),也可以定制为只支持特定类型(如JSON Inspector)。如果你是开发人员,可以通过类库FiddlerCore把Fiddler的核心代理引擎植入到自己的应用中。
Fiddler可以解密HTTPS数据流,使用“中间人(man-in-the-middle)”1解密技术来显示和修改这些在网络上不可读的请求。要做到没有安全告警的无缝调试,可以把Fiddler的根证书(root certificate)安装到系统或Web浏览器的受信任的证书库中。
一个Web会话(Web Session)代表客户端和服务器之间的一个事务。Fiddler界面中左侧边栏的Web会话列表中的一个条目就是一个会话。一个会话对象包含一个请求和一个响应,分别表示客户端发送给服务器的数据以及服务器返回给客户端的数据。会话对象还会维护一组标志位(Flag),用于保存会话的元数据以及在处理该会话过程中记录的时间戳对象(Timer)。
代理服务器并非局限于查看网络流量——顾名思义,Fiddler这个名字的含义在于它可以“随意玩弄(fiddle)”发送出去的请求和接收进来的响应。可以设置请求或响应断点以手工修改数据流。到达设置的断点后,Fiddler会暂停会话,以便用户手工修改请求和响应。Fiddler还支持在其内部运行脚本或扩展来改写数据流。默认情况下,Fiddler是在缓冲模式(buffering mode)下工作的,即Fiddler是接收到服务器的完整响应之后才将响应的内容返回给客户端。如果启用流模式(streaming mode),Fiddler会将从服务器端接收到的响应立即返回给客户端。因此,流模式下不支持对服务器的响应进行修改。
Fiddler捕获的会话信息可以保存到会话归档(Session Archive Zip,SAZ)文件中,以方便后续查看。这种格式的压缩文件中包含了完整的请求和响应、标志位、时间戳对象以及其他元数据。非技术人员可以使用一个轻量级的捕获工具FiddlerCap来生成SAZ文件,再把这些文件提供给专业人员进行分析。Fiddler支持扩展组件Exporter,它支持把捕获到的会话以其他工具支持的格式来保存,从而保证了Fiddler和这些工具的互通性。同样,Fiddler也支持扩展组件Importer,它支持Fiddler加载以其他格式存储的数据流,包括很多浏览器开发工具所使用的HTTP Archive(HAR)格式。
1.2.2 使用场景
我最经常遇到的一些问题类似于:“我可以使用Fiddler来完成吗”?Fiddler适用于很多场景中。但是,对于一些场景,Fiddler是不合适的。绝大多数情况下,人们所使用的是Fiddler的少数几个功能。以下将简单说明Fiddler所适用以及不适用的场景。
Fiddler支持功能的不完整列表
- 查看几乎所有的浏览器、客户端应用或服务之间的Web数据流。
- 手动或自动修改任意的请求或响应。
- 解密HTTPS数据流以便查看和修改。
- 归档捕获到的数据流,支持在不同的计算机上加载这些数据。
- 给客户端应用“回放(play back)”先前捕获到的响应,即使当前服务器处于脱机状态。
- 绝大多数PC和各种设备之间的Web数据流的调试,包括Mac/Linux系统、智能手机和平板电脑。
- 挂接到(chain to)上游代理服务器,包括TOR网络2。
- 作为反向代理运行,在不需要重新配置客户端计算机或设备的情况下,在服务端捕获数据流。
- 随着基于FiddlerScript或.NET可扩展模型实现的新功能的不断增加,Fiddler将变得更加强大。
Fiddler不支持功能的不完整列表
Fiddler是一个非常灵活的工具,但某些功能目前还不支持。
调试非网络协议数据流。
- Fiddler支持HTTP、HTTPS和FTP数据流以及相关的协议,如HTML5 WebSockets和ICY流。
- Fiddler无法监测或修改基于其他协议的数据,如SMTP、POP3、Telnet、IRC等。
-
处理超大请求和响应。
- 超过2GB的请求,Fiddler无法处理。
- 超过2GB的响应,Fiddler的处理能力有限。
- Fiddler使用系统内存和页面文件(pagefile)来保存会话数据。保存大量的会话或超大的请求和响应会导致性能急剧下降。
-
“神奇”地修复网站的错误(bug)。
- Fiddler可以用来协助识别网络问题,但通常不能独立修复这些bug。我已经收到过无数个电子邮件:“怎么回事?我已经安装了Fiddler,但我的网站怎么还有很多bug?!”
好了,完成了Fiddler的入门,接下来让我们一起深入探索它吧!