《Fiddler调试权威指南》——第1章 引言 1.1 起源

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

本节书摘来自异步社区《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所示。

screenshot


图1-1

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

screenshot


图1-2

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

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

screenshot

图1-3

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

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

screenshot

图1-4

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

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

相关文章
|
2月前
|
存储 缓存 网络协议
网络基础知识笔记(三)
网络基础知识笔记(三)
|
2月前
|
开发框架 缓存 算法
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
|
2月前
|
运维 安全 Linux
服务器基础知识大科普
服务器基础知识大科普
64 0
|
3月前
|
移动开发 前端开发 程序员
一些不错的编程学习网站
一些不错的编程学习网站
63 13
|
7月前
|
C语言
第一章 C语言知识点(程序)
第一章 C语言知识点(程序)
58 0
|
4月前
|
安全 网络协议 网络安全
入门防火墙基本原理,还是得看这篇!小白一看就懂!
入门防火墙基本原理,还是得看这篇!小白一看就懂!
|
4月前
|
安全 网络协议 网络安全
BACnet初学者教程,第一章:BACnet/IP介绍
BACnet初学者教程,第一章:BACnet/IP介绍
63 0
|
6月前
|
Python
GitHub爆赞!终于有大佬把《Python学习手册》学习笔记分享出来了
这份笔记的目标是为了给出一份比较精炼,但是又要浅显易懂的Python教程。《Python学习手册》中文第四版虽然比较简单,但是措辞比较罗嗦,而且一个语法点往往散落在多个章节,不方便读者总结。 我在做笔记时,将一个知识点的内容都统筹在一个章节里面,因此提炼性大大提高。而且还有《Python学习手册》中文第四版的翻译在某些章节(可能难度较大?)措辞可能前后矛盾。当知识点提炼之后就能够很快的找到一些难以理解的概念的上下文,方便吃透这些难点。
|
7月前
|
数据采集 Ubuntu Linux
提升你的C编程技能:使用cURL下载Kwai视频
使用C语言和cURL库下载Kwai视频的教程,结合代理IP提升爬虫匿名性和效率。首先安装cURL库,然后编写C代码,设置cURL选项如URL、代理信息、SSL验证和回调函数。代理IP用于隐藏真实IP,提高下载成功率。示例代码包含代理设置、User-Agent和Cookie配置。注意替换URL和代理信息以适应实际需求。
提升你的C编程技能:使用cURL下载Kwai视频
|
6月前
|
存储 编解码 自然语言处理
一篇文章讲明白FFmpeg从入门到精通:SEI那些事
一篇文章讲明白FFmpeg从入门到精通:SEI那些事
153 0