Fiddler – 第一部分: HTTP调试

介绍

有没有一直好奇微软的Internet Explorer浏览器是如何与Web程序进行交互的?有没有遇到过奇怪的性能瓶颈难以找到原因?是不是好奇哪些cookies被传送,或者哪些下载内容是可以被标记为’可以缓冲’的?

Fiddler可以解答这些问题.Fiddler是一个HTTP调试代理服务器. 它可以记录下电脑和Internet的所有HTTP通讯.Fiddler可以监控所有HTTP通讯,设置断点,并且操作收入\传出的数据.Fiddler比NetMon或者其他的网络调试工具都要简单,因为它只是暴露HTTP通讯内容.

Fiddler包括了一个简单但是功能强大的基于Microsoft Jscript.NET脚本的子系统,它可以非常便捷的支持各种HTTP调试任务.Fiddler是用C#语言在Microsoft .Net框架上开发的工具.

 

 

开始

安装

- Fiddler要求Microsoft Windows 2000或者更高的系统版本,大约10M的硬盘空间

- 操作系统需要安装有.Net Framework1.1

- 下载Fiddler在https://www.fiddlertool.com

- 成功安装后,你可以在IE的工具栏里看到Fiddler的图标
- 如果IE的工具栏没有Fiddle图标,右击IE工具栏,点击定制化,选择Fiddler图标;也可以在开始菜单找到Fiddler

运行Fiddler

启动Fiddler之后,它会把自己注册成Microsoft Internet Service(WinInet)的系统代理 – WinInet是为IE, Microsoft Office和其他很多产品公用的HTTP层的服务.检查Fiddler是不是在成功的截取HTTP请求,可以通过:打开IE>工具>Internet选项>连接>Lan Settings>高级选项.下图代表成功.


图示1. Internet Explorer代理设置

 

作为系统代理,所有通过WinInet的HTTP请求都会通过Fiddler去连接它的目标Web服务器.反之亦然,所有HTTP响应也都会先通过Fiddler再到达客户端

图示2. HTTP通信流 

当你关闭Fiddler,它会先注销自己作为系统代理的角色,然后关闭程序.

 

 

使用Fiddler

视图

Fiddler的使用界面包括了HTTP会话列表和多个选项卡.在这些选项卡中,可以浏览选中会话的的各种信息.

图示3. Fiddler的用户界面

窗口左边部分: HTTP会话列表

窗口右边Statics: 显示选中HTTP会话的数据

窗口右边Inspector: 该选项卡可以以不同的格式查看每个请求和响应的内容

窗口右边AutoResponder: 该选项卡可以设置返回本地存储的内容,而不用发送请求给服务器

窗口右边Composer: 利用该选项卡可以手工制造发送给服务器的请求内容.你可以选择创建一个新的请求,或者可以通过拖拉修改Web会话中已经存在的请求

窗口右边Filters: 可以便捷的过滤掉不需要查看的记录

窗口右边Log: 记录Fiddler的事件日志

窗口右边Timeline: 时间线选项卡可以查看选中HTTP会话的时间传送信息

 

 

使用Fiddler做系统性能测试

HTTP数据视图

Fiddler可以暴露所有的HTTP通讯,因此可以简单的呈现出那些文件用来生成那些页面.在数据统计选项卡,用户可以通过选中多个HTTP会话来查看”总计页面权重” – 请求的数量和传输的比特数.


图示4. 统计视图

 

另外,通过在会话列表中显示HTTP数据头,用户可以查看页面是否缺失允许客户端或者代理服务器缓存的HTTP过期数据头.如果一个响应不包含缓存控制的数据头,那么它应该不能被客户端缓存.

图示 5. HTTP缓存信息

 

使用Fiddler做调试

为了可以查看所有的HTTP请求和响应,Fiddler支持设置调试断点.在Rule菜单允许单步调试选项,或者当HTTP请求或响应满足设置的目标条件时,Fiddler可以暂停HTTP通讯并且允许编辑.这个功能对安全性测试很有帮助,因为它可以检验所有可能的情况所有的编码路径也都可以被操作,这对基本的功能性测试很有帮助.

 

图示 6. 会话监控视图

用户可以在Builder页面手动制造一个HTTP请求,或者可以通过拖拉把已经存在的请求从会话列表拉到Builder页面运行.

 

Fiddler扩展

Fiddler是可以用过.Net框架进行扩展的.Fiddler的扩展有两个主要机制:定制化规则和检查器.

通过脚本定义的规则扩展Fiddler

Fiddler支持Jscript .Net事件处理引擎,因此可以允许用户自动的修改HTTP请求和响应.该引擎可以修改会话在Fiddler界面的展现形式,从而可以重点显示错误或者从会话列表中去掉不感兴趣的会话.

下面的示例代码修改了客户界面:用紫色来显示上传的cookies.

 static function OnBeforeRequest(oSession:Fiddler.Session)
 {
    if (oSession.oRequest.headers.Exists("Cookie")){
       oSession["ui-color"] = "purple";
       oSession["ui-bold"] = "cookie";
    }
 }

通过添加监控参数扩展Fiddler

用户可以添加用任何.Net语言编写的监控对象插件. RequestInspectors和ResponseInspectors可以提供用特定形式或者特定的视图来查看HTTP请求和响应.

Inspectors监控参数可以使只读的,也可以是读写类型.如果一个监控参数是读写类型,它可以用来在服务器或者客户端收到请求或者响应前修改他们.

 默认情况,Fiddler可以承载下面的监控参数.

请求监控参数

  • [RW] Headers—显示请求头和状态
  • [RW] TextView—在文本框显示请求
  • [RW] HexView—用十六进制视图显示请求
  • [RO] XML—把请求体作为XML
         DOM,用树形视图显示请求

响应监控参数

  • [RW] Transformer—可以移除掉GZip, DEFLATE, 和CHUNKED类型的编码方便调试[RW] Headers—显示响应头数据和状态
  • [RW] TextView—在文本框显示响应
  • [RW] HexView—用十六进制视图显示响应
  • [RO] ImageView—用图形方式显示响应.支持所有的.NET图形格式.
  • [RO] XML—把请求体作为XML DOM,用树形视图显示响应
  • [RO] Privacy—如果存在的话,在响应数据头说明P3P声明

 待续...

 原文: https://msdn.microsoft.com/en-us/library/bb250446(v=vs.85)

 

Leola Xu许亚男