Fiddler背后的故事

Posted 异步图书

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fiddler背后的故事相关的知识,希望对你有一定的参考价值。

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


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



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


Fiddler背后的故事

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


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

Fiddler背后的故事


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


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

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


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


本文摘自:《Fiddler调试权威指南》


---------------延续阅读---------------


作者简介:

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


---------------关于本书---------------


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


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


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


本书几乎涵盖了FiddlerFiddlerCore的每个主题,但它不是关于HTTPSSL HTMLWeb 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以及本书。


希望你喜欢本书!


以上是关于Fiddler背后的故事的主要内容,如果未能解决你的问题,请参考以下文章

Atom 背后的故事

聊聊CookieSessionToken 背后的故事

聊聊CookieSessionToken 背后的故事

更好的 java 重试框架 sisyphus 背后的故事

java main方法背后的故事?(转)

2020 年末新冠案例背后的故事