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>高级选项.下图代表成功.
作为系统代理,所有通过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会话来查看”总计页面权重” – 请求的数量和传输的比特数.
另外,通过在会话列表中显示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许亚男
Comments
- Anonymous
January 01, 2003
上次terry说会发一个关于deploying Microsoft Dynamics CRM as an Internet-facing deployment(IFD)下的Active Directory Federation Services 2.0的配置视频,期待你们的作品啊