本节书摘来自异步社区《Fiddler调试权威指南》一书中的第1章,第1.1节,作者:【美】Eric Lawrence著,更多章节内容可以访问云栖社区“异步社区”公众号查看
第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。