Fiddler调试权威指南(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-13 07:57:51

点击下载

作者:(美)Eric Lawrence 著

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Fiddler调试权威指南

Fiddler调试权威指南试读:

内容提要

Fiddler是一种流行的Web调试代理。它功能强大,界面友好,简单易用,无论对开发人员或者测试人员来说,都是非常有用的工具。

本书是Fiddler的开发者Eric Lawrence编写的一本权威的参考指南。全书分为10章和4个附录,从认识Fiddler开始,介绍了基本技巧和概念、配置选项、Inspectors、扩展、数据流导入导出、FiddlerScript和FiddlerCore等主题;附录部分还给出了故障排除和命令行等有用的参考信息。

本书适合Web开发人员和Web测试人员阅读参考,也适合想要学习和掌握Fiddler的读者阅读。通过本书,你将学会如何利用Fiddler调试Web相关的应用,掌握如何调试HTTPS数据流,学会如何在流行的设备上使用Fiddler,甚至掌握更多高级的扩展功能。

作者简介

Eric Lawrence(@ericlaw)是Fiddler Web调试平台的创始人。全世界无数的Web专业人员都在使用Fiddler。Eric目前是微软IE浏览器组的Program Manager,他从1999年就一直在开发Web应用和浏览器。他的博客是http://blogs.msdn.com/b/Fiddler和http://blogs.msdn.com/bIEInternals。除了创建Fiddler之外,他还开发和维护其他的免费工具,可登录http://bayden.com/了解详细信息。

致谢

如果不是来自全世界很多人的许多帮助,就不会有本书,甚至也不会有Fiddler。

首先,我要感谢我的妻子Jane,她给了我很多鼓励,是我灵感的源泉,而在我花费无数个日日夜夜开发Fiddler以及写作本书时,她又给予了极大的耐心。我还要感谢我的父母和祖母,由于他们的教育,我对知识如饥似渴,自己动手写书的愿望开始滋长。在过去几年里,由于呆在家里写代码,我谢绝了很多朋友聚会,希望他们能够原谅我。

感谢同事给我的许许多多的帮助,在这里无法一一列出,感谢Fiddler社区源源不断地给予鼓励、提出建议和报告bug。特别值得一提的是,同事Jim Moore仔细审阅了本书的草稿,并提出了中肯的反馈。感谢很多Fiddler的贡献者,有你们的帮助才能够有资金维护和发布Fiddler。

最后,感谢你,亲爱的读者,感谢你关注Fiddler,选择本书!第1章引言1.1 起源

首先,坦白地说,开发Fiddler Web调试器时,并没有什么伟大的愿景或期望—要做一个全世界最受欢迎的调试代理。它只是由具体需求触发,应运而生。我从未打算构建一个功能如此灵活而强大的复杂平台。因为它的复杂性,我不得不花费九个月的时间来写这本书,为的就是介绍如何充分利用Fiddler。我们真的做到了!

在深入介绍技术细节之前,首先分享一下Fiddler背后的故事。

1999年春天,我还是马里兰大学的学生,得到了微软的一个新团队的程序经理(Program Manager)职位的面试机会。在最后一轮面试中,面试官的第一个问题是“HTTP是如何工作的?”我对此只是略知皮毛,因此给了个不完整也不太准确的回答,但还不至于让自己很难堪。从那个暑假开始,我的工作是参与第一版SharePoint的开发。我偶尔会使用Microsoft Network Monitor (NetMon)查看网络数据流。Microsoft Network Monitor(NetMon)是一个功能强大的数据包探嗅器(packet sniffer),但很原始很难用。2001年暑假刚开始,我正式加入微软公司,工作职位是Office Clip Art organizer客户端和网站的程序经理。

当时,我所在团队的大多数开发和测试人员都不熟悉Web开发,他们之前主要是用C和C++实现本地运行的应用。很快,调试过程过于繁琐这个问题就凸显出来—很多同事都不愿意使用NetMon。我甚至看到一些开发人员用如下方式调试HTTP请求—把鼠标停留在Visual Studio的某些变量上,查看十六进制形式的原始数据流,如图1-1所示。图1-1

在过去几年,我编写了一些小工具,因此有信心实现一个使得Web调试变得简单的工具。最初的方案是基于已有的C++代理服务器,对其做些修改,从而可以把HTTP流输出到系统控制台,如图1-2所示。图1-2

这种方案说它多差都不为过—这个代理无法处理安全数据流或认证协议。非文本形式的内容的显示也是个问题——可笑的是,该工具还会把二进制内容当成ASCII码显示。老式控制台用户可能还记得八进制的0x07代表的是字符“bell”,因此当控制台显示0x07时,系统就会发出声响。因此,这个调试代理发布后,由于测试人员使用时会遇到二进制数据流,Office Online团队的走廊就会不断响起像拉斯维加斯的赌场那样的声响。

虽然有烦人的缺陷,但这个工具还是很受欢迎,这激发我开始考虑下一个版本。我使用Borland Delphi快速实现了一个小演示程序,Borland Delphi是我当时工作时最常用的开发工具。其彩色UI界面是Fiddler的最终外观的基础,如图1-3所示。图1-3

然而,在考虑了使用本地代码编写代理服务器所涉及的安全和内存管理问题后,我决定使用C#语言来实现新版本,该语言是由Visual Studio团队开发的,我一个很好的朋友加入了该团队。于我而言,通过.NET从零开始实现HTTP代理服务器面临两大挑战:一是我不是很了解HTTP是如何工作的;二是我不会用C#。

幸运的是,花钱买几本书,以及利用大量的周末闲余时间,我很快克服了这两个不足。其中有两本书是我的良师益友:《HTTP: The Definitive Guide》和《C# Cookbook》。通过一章章的学习,我了解了HTTP是如何工作,以及如何用C# .NET编程,也开始慢慢地实现Fiddler。大约半年后,我完成了Fiddler的第一个版本,如图1-4所示。图1-4

同样,这个版本也存在很多不足(错误也是不计其数),但是同事们都积极采用了它,因为之前的版本不断地发出蜂鸣声,他们电脑的音箱都快崩溃了。

随后几年,Fiddler有了很大改进,它包含两个扩展模块,一是自动生成和修改响应的机制,二是支持加密的(HTTPS)数据流、FTP和HTML5 WebSockets。关于本书

历经九年以及无数次版本更新,Fiddler已经发展成一个强大的工具和平台,可以执行各种任务。它有一个可扩展性相当强大的模型,以及一个组件开发者社区,他们又进一步增强了Fiddler作为性能、安全和负载测试工具的价值。从过去几年的电子邮件咨询、在线讨论小组以及无数次的会议来看,大多数用户只是用到了Fiddler很少的一部分功能。我开始意识到如果有关于该工具的完整指南,很多用户可以更好地利用它。本书就是由此而来。

作为Fiddler的作者,我发现写这本书既简单又具有挑战性。其简单性在于我非常了解Fiddler,比如其底层实现,而且对于一些晦涩的细节查看源代码就可以了解。其挑战性在于每当我选择写某个有趣的场景或功能时,将迫使我对其进行深入的思考。通常情况下,我写着写着就“跑偏”了,转而写代码对Fiddler进行改进,改进之后,原来的主题通常只需要很少的篇幅来介绍甚至不再需要介绍。最后,我重写了本书的大部分内容和Fiddler工具本身。这个过程很漫长,但工具和书之间彼此也相得益彰。

本书的出版时间和Fiddler 2.4.0.0版本的发布时间基本一致,大致都在2012年初夏。如果你使用的是更高版本的Fiddler,你会发现一些细微差别,但其核心概念一致。

本书几乎涵盖了Fiddler和FiddlerCore的每个主题,但它不是关于HTTP、SSL、 HTML、Web Services或深入了解Fiddler所需的很多其他主题的教程。如果你想深入了解网络协议,我建议你查看以下资料,我在开发Fiddler的过程中一直在参考这些资料:● Hypertext Transfer Protocol -- HTTP/1.1,网址为http://

www.ietf.org/rfc/rfc2616.txt;● David Gourley的《HTTP: The Definitive Guide》;● Balachander Krishnamurthy 和 Jennifer Rexford 的《Web

Protocols and Practice: HTTP/1.1, Networking Protocols,

Caching, and Traffic Measurement》;● Stephen A. Thomas的《SSL & TLS Essentials: Securing the

Web》。

关于本书的阅读方式,你可以从头到尾阅读本书,也可以通过目录和索引来查找自己感兴趣的话题。我建议你阅读本书的所有章节,即使其中某些章节可能和你不相关,因为每章都包含了一些独有的建议和技巧。

我很推崇从下一节开始阅读,它介绍了一些术语和基础概念,可以帮助你更好地了解Fiddler以及本书。

希望你喜欢本书!1.2 快速入门

本节将介绍Fiddler的一些基础知识,这些内容可帮助你入门并为本书后续的学习奠定基础。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)”解密技术来显示和修改这些在网络上不可读的请求。要做到没有安全告警的无缝调试,可以把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网络。● 作为反向代理运行,在不需要重新配置客户端计算机或设备的情

况下,在服务端捕获数据流。● 随着基于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的入门,接下来让我们一起深入探索它吧!

① 译注:“中间人”这个说法是借用了网络上常见的“中间人攻击(Man-in-the-Middle Attack)”(参考http://baike.baidu.com/view/ 1531871.htm),指Fiddler在两台通信的计算机之间充当“中间人”角色。

② 译注:TOR是专门防范对流量探嗅分析的软件项目。它通过由遍及全球的中继所组成的分布式网络转发通信,可以实现匿名访问网络。第2章探索Fiddler2.1 入门

Fiddler的官方网站为http://getfiddler.com,强烈建议通过站点下载Fiddler,因为有些恶意网站对其进行了重新打包,会附带安装一些其他软件(如广告软件或浏览器工具栏)。2.1.1 系统需求

从Windows XP到Windows 8,所有版本的Windows操作系统都支持Fiddler。安装Fiddler唯一需要的就是预先安装Microsoft .NET Framework 2.0或更高版本。Windows Vista或更高版本的系统中已经自带安装了.NET Framework,在Windows XP中可以使用WindowsUpdate来安装它。如果你的系统中只安装了.NET 4(以Windows 8系统为例,大多没有安装.NET 2.0、 3.0或 3.5),需要下载Fiddler 4包,它可以在.NET v4 CLR上运行。和大部分.NET程序一样,Fiddler在32位操作系统中会以32位模式运行,而在64位操作系统下会以64位模式运行。Fiddler在64位操作系统中的运行效果最好,即使这些系统的内存小于4GB。

虽然不是必须,但是安装Internet Explorer 9或更高版本的IE后, Fiddler可以提供更多的功能,因此强烈建议安装。特别说明一下,当安装了IE 9及更高版本的浏览器时,Fiddler的WebView Inspector可以显示媒体类型,无需配置就可以查看发送到http://localhost的数据流。此外,修改IE的配置之后,就可以通过http请求头中的X-Download-Initiator来查看请求的来源。

安装Fiddler的基本功能需要5MB左右的磁盘空间,而安装最常用的插件也需要占用5MB左右的磁盘空间。内存不低于512MB的系统就可以运行Fiddler,但当运行于内存大于2GB的系统中时,其性能会显著提高。2.1.2 安装Fiddler

Fiddler的安装很简单——首先是接受最终用户许可协议条款(简单而言,协议的内容就是:一是不要做违法的事;二是作者不提供任何保证),然后选择Fiddler的安装目录。建议使用默认的文件夹作为安装路径——因为有些Fiddler组件会以Fiddler被安装在默认路径下为前提,如果Fiddler没有被安装在默认路径下,该组件将无法正常安装。Fiddler的默认安装路径是%ProgramFiles%\Fiddler2,在大多数系统中就是C:\Program Files\Fiddler2\,而在64位的系统中则是 C:\Program Files (x86)\Fiddler2\。如果操作系统支持64位,Fiddler本身会运行在64位模式下,而它之所以被安装在32位的Program Files文件夹中,通常仅仅是由于安装程序是32位的。

当成功地安装了Fiddler之后,会打开一个Web页面,显示使用Fiddler的一些关键信息。Fiddler工具的启动图标会被安装在开始菜单(Start Menu)和浏览器的菜单栏中,在这两个地方都可以启动它。此外,你还可以通过快捷键“Windows+R”调出运行框,通过在其中输入fiddler2来启动。权限和XCOPY部署

安装Fiddler需要管理员权限,因为它会更新计算机文件夹和注册表位置。如果没有管理员权限,可以采用常见的XCOPY部署(XCOPY Deployment)方式,即在另一台机器上安装Fiddler,然后把它的%ProgramFiles%\Fiddler2\文件夹复制到目标机器或USB存储中。虽然采用这种方式时,Fiddler的某些功能不可用(比如IE工具栏按钮和用于Firefox的FiddlerHook扩展插件),Fiddler本身还是可以正常工作的。2.1.3 更新Fiddler

Fiddler在启动时,会自动查询是否有新版本。当发现有新版本时,你会看到如图2-1所示的更新提示。图2-1

单击Yes按钮,Fiddler会启动浏览器,下载最新的安装程序。下载完成后,关闭正在运行的Fiddler,手动安装新下载的程序。如果单击的是Next Time(下一次安装)这个按钮,下一次启动Fiddler时,它会自动下载并安装最新版本。如果点击的是No,弹出的对话框就会关闭,不会安装新的版本;下一次启动Fiddler时,这个提示还会弹出。

强烈建议安装最新版本的Fiddler,因为每次更新通常都会增加新功能、提高性能以及修复bug。当前,Fiddler更新时不会自动对扩展进行更新,因此你需要不时地去登录那些扩展插件开发者的Web站点上自行检查扩展是否有新版本。

管理员如果禁止用户使用Help > Check for Updates命令,可以通过修改注册表的方式实现。打开Windows注册表编辑器,在HKLM\SOFTWARE\Microsoft\Fiddler2中新加一条记录,类型为REG_STRING,名称为BlockUpdateCheck,值为True。2.1.4 卸载Fiddler

可以使用控制面板中的“添加/删除程序”来卸载Fiddler。卸载后,系统并不会被清理干净,因此卸载无法解决配置问题。当遇到这些问题时,查看本书附录A以得到更多信息。2.2 FIDDLER用户界面

Fiddler用户界面看起来非常复杂,因为它包含了大量的Web数据流信息,而且提供了很多自定义功能。

Fiddler窗口的左边是Web Sessions列表,如图2-2所示其右边是各个选项视图(Views),显示在Web Sessions列表中选中的Session的信息。在窗口的最上方,主菜单栏(Main Menu)和工具栏(Toolbar)提供了各种操作的快捷入口。在窗口的最下方是状态栏(Status Bar),其中显示的是一些关键信息以及重要的命令。在Web Sessions列表下方的是一个很小的命令行窗口QuickExec,它支持快速过滤和命令调用功能。图2-2

小贴士:● 很多UI控制键包含上下文菜单。经常右击这些控制键会有很多收

获。● 如果鼠标箭头变成手势,说明可以点击该UI控制键。● 支持标准的键盘快捷方式(如CTRL+C表示拷贝,CTRL+A表示

全部选中,CTRL+G表示跳到特定的行号,F3用于搜索)。● 当有弹出的消息窗口时,按下CTRL+C会把文本拷贝到剪贴板。● 按下ESC键可以关闭对话框或搜索框。● 在启动Fiddler时,同时按下SHIFT键,可以把Fiddler的UI重新设

置为默认形式。● 双击选项卡标题,可以把该选项从视图中删除。● 双击splitter,可以最大化显示该splitter右侧的区域。2.2.1 Web Sessions列表

Web Sessions列表是Fiddler中最重要的部分——它显示了Fiddler所捕捉到的每个Session的简短的摘要信息。Fiddler中的大部分操作都是通过选中Web Session列表中的一个或多个项来启动的。要选中多个Session,需要同时按住CTRL或 SHIFT键,然后再点击想要选中的Session。双击或按下Enter键会打开选中Session的默认Inspectors。Inspectors启动后,Fiddler会自动选择最适合显示选中的Session的请求和响应的Inspector。

Web Session列表栏中包含了一些重要信息,具体如下:● # – Fiddler为Session生成的ID。● Result – 响应状态码。● Protocol – 该Session使用的协议(HTTP/HTTPS/FTP)。● Host – 接收请求的服务器的主机名和端口号。● URL – 请求URL的路径、文件和查询字符串。● Body – 响应体中包含的字节数。● Caching – 响应头中Expires和Cache-Control字段的值。● Content – Type – 响应的Content-Type头。● Process – 数据流对应的本地Windows进程。● Custom – FiddlerScript 所设置的ui-CustomColumn标志位的值。● Comments –通过工具栏Comment按钮设置的注释信息。

可以通过拖拽来调整Web Sessions列表中的各个列标题,改变它们的大小和顺序;单击列标题,fiddler会按该列的值对Web Sessions中的项进行排序。使用FiddlerScript、Extensions或QuickExec可以添加新字段。理解不同图标和颜色的含义

Web Sessions列表中的每行记录的默认文本色彩体现了HTTP状态(红色表示错误,黄色表示认证)、数据流类型(灰色表示CONNECT)、响应类型(紫色表示CSS、蓝色表示HTML、绿色表示script、灰色表示图像)。在FiddlerScript Session的ui-color标志位中可以修改字体颜色。

每行都有一个指向Session进度、请求类型或响应类型的快捷图标,图标及其含义见表2-1。表2-1  Web Sessions图标正在向服务器发送请求正在从服务器下载响应请求停止于断点处,允许对它进行修改响应停止于断点处,允许对它进行修改请求使用的是HEAD或OPTIONS方法,或者返回HTTP/204状态码。通过HEAD方法和OPTIONS方法,客户端无需下载内容就可以获取目标URL或服务器的信息。HTTP/204状态码表示没有指定URL的响应体请求使用了POST方法向服务器发送数据响应是HTML内容响应是图像文件响应是脚本文件响应是CSS文件响应是XML格式响应是JSON格式响应是音频文件响应是视频文件响应是Silverlight小程序响应是Flash小应用程序响应是字体文件响应Content-Type没有专用的图标请求使用CONNECT方法。使用该方法构建传送加密的HTTPS数据流的通道Session封装了HTML5 WebSocket连接响应是HTTP/3xx类重定向响应是HTTP/401或HTTP/407,要求客户端进行认证;或响应为HTTP/403,表示访问被拒绝响应包含HTTP/4xx或HTTP/5xx错误状态码

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载