Fiddler 是一款基于 Windows 系统的专用代理服务器软件。本地运行的程序,如 Web 浏览器,Office 应用程序以及其他客户端应用,可以把 HTTP 和 HTTPS 请求发送给 Fiddler,Fiddler 通常把这些请求转发给 Web 服务器。然后,服务器把这些请求的响应返回给 Fiddler,Fiddler 再把这些响应转发给客户端。
Fiddler 使用场景
Fiddler 支持功能的不完整列表
- 查看几乎所有的浏览器、客户端应用或服务之间的 Web 数据流。
- 手动或自动修改任意的请求或响应。
- 解密 HTTPS 数据流以便查看和修改。
- 归档捕获到的数据流,支持在不同的计算机上加载这些数据。
- 绝大多数 PC 和各种设备之间的 Web 数据流的调试,包括 Mac/Linux 系统、智能手机和平板电脑。
- 挂接到(chain to)上游代理服务器,包括 TOR 网络。
- 作为反向代理运行,在不需要重新配置客户端计算机或设备的情况下,在服务端捕获数据流。
- 随着基于 FiddlerScript 或 .NET 可扩展模型实现的新功能的不断增加,Fiddler 将变得更加强大。
Fiddler 不支持功能的不完整列表
- 调试非网络协议数据流。
- Fiddler 支持 HTTP、HTTPS 和 FTP 数据流以及相关的协议,如 HTML5 WebSockets 和 ICY 流。
- Fiddler 无法检测或修改基于其他协议的数据,如 SMTP、POP3、Telnet、IRC 等。
- 处理超大请求和响应。
- 超过 2GB 的请求,Fiddler 无法处理。
- 超过 2GB 的响应,Fiddler 的处理能力有限。
- Fiddler 使用系统内存和页面文件来保存会话数据。保存大量的会话或超大的请求和响应会导致性能急剧下降。
- “神奇”地修复网站的错误
- Fiddler 可用来协助识别网络问题,但通常不能独立修复这些 BUG。
Fiddler 用户界面
Fiddler 窗口的左边是 Web Session 列表,右边是各个选项视图(Views),显示在 Web Session 列表种选中的 Session 的信息。在窗口的最上方,主菜单栏(Main Menu)和工具栏(Toolbar)提供了各种操作的快捷入口。在窗口的最下方是状态栏(Status Bar),其中显示的是一些关键信息以及重要的命令。在 Web Session 列表下方的是一个很小的命令行窗口 QuickExec,它支持快速过滤和命令调用功能。
Web Session 列表
Web Session 列表是 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 Session 列表中的各个列标题,改变它们的大小和顺序;单击列标题,Fiddler 会按该列的值对 Web Session 中的项进行排序。使用 FiddlerScript、Extensions 或 QuickExec 可以添加新字段。
Web Session 不同图标和颜色的含义
Web Session 列表中的每行记录的默认文本色彩体现了 HTTP 状态(红色表示错误、黄色表示认证)、数据流类型(灰色表示 CONNECT)、响应类型(紫色表示 CSS、蓝色表示 HTML、绿色表示 Script、灰色表示图像)。在 FiddlerScript Session 的 ui-color 标志位中可以修改字体颜色。
每行都有一个指向 Session 进度、请求类型或响应类型的快捷图标,图标及其含义见下表:
图标 | 含义 |
---|---|
![]() |
正在向服务器发送请求 |
![]() |
正在从服务器下载响应 |
![]() |
请求停止于断点处,允许对它进行修改 |
![]() |
响应停止于断点处,允许对它进行修改 |
![]() |
请求使用的是 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 错误状态码 |
![]() |
Session 被客户端应用、Fiddler 或服务器终止。客户端的浏览器在下载一个页面的过程中,用户导航到另 一个页面时,通常会发生这种情况。客户端浏览器取消所有正在处理的请求,因此最后 Session 的响应状态 是 Aborted |
![]() |
该响应属于 HTTP/206 响应类型。该响应通常在客户端对目标 URL 执行 Range 请求获取部分内容时发生 |
![]() |
响应状态是 HTTP/304,表示客户端缓存的副本已经是最新的了 |
![]() |
Web Session 是没有加锁的,因而可以修改已经处理完成的 Session |
Web Session 快捷键
快捷键 | 作用 |
---|---|
Spacebar | 在视图中激活并显示当前 Session |
CTRL + A | 选中所有 Session |
ESC | 取消选中所有 Session |
CTRL + I | 反向选中:取消选中的 Session,选中之前未选中的 Session |
CTRL + X | 删除所有 Session(和 fiddler.ui.CtrlX.KeepMarked 相关的) |
Delete | 删除选中的 Session |
Shift + Delete | 删除所有未选中的 Session |
R | 重新执行当前请求 |
SHIFT + R | 多次重复执行当前请求(次数在后续的提示框中给出) |
U | 无条件地重新执行当前请求,发送不包含 If-Modified-Since 和 If-None-Match 的请求头 |
SHIFT + U | 无条件地多次重复执行当前请求(执行次数在后续的提示框中给出) |
P | 选中触发请求的父请求。根据 HTTP 请求头的 Referer 值确定父请求 |
C | 选中该响应触发的所有子请求。根据 HTTP 请求头的 Referer 字段的取值或者标示重定向的 Location 字段的取值判断 |
D | 选中和当前 Session 使用了相同请求方法和 URL 的所有“重复”请求 |
ALT + Enter | 查看当前 Session 的属性 |
SHIFT + Enter | 在新的 Fiddler 窗口中启动该 Session 的 Inspectors |
Backspace or “Back”mouse button |
激活之前选中的 Session |
Insert | 切换是否用红色粗体标记选中的 Session |
CTRL+1 CTRL+2 CTRL+3 CTRL+4 CTRL+5 CTRL+6 |
把选中的 Session 分别用粗体红色、蓝色、金色、绿色、橙色或紫色表示 |
M | 给选中的 Session 添加描述 |
Web Session 上下文菜单
右击 Web Session 列表顶端的标题栏,显示包含两个选项的上下文菜单,如下表所示:
菜单 | 说明 |
---|---|
所有列可见 | 把每个列的宽度重新设置为至少 30 个像素,确保所有列都是可见的 |
如何配置列… | 打开一个帮助窗口,说明了如何在 Web Session 列表中添加新列 |
右击 Web Session 列表,会出现一个很大的上下文菜单。在该上下文菜单中,很多选项只有在选中了 Web Session 列表中一个或多个 Session 时才可见。FiddlerScript 会对该菜单进行扩展,因此它总是包含一些额外的命令。
AutoScroll Session List 选项用于决定 Fiddler 是否会自动把新增的 Session 添加到 Web Session 列表中。
Copy 菜单项用于复制在 Web Session 列表中选中的 Session 的信息,如下表所示:
菜单项 | 说明 |
---|---|
Just Url | 把选中的 Session 的 URL 列表拷贝到剪切板,每行一个 URL。当光标定位在 Web Session 列表时,快捷键 CTRL + U 可完成此功能 |
This Column | 拷贝菜单所在列的文本。把选中的 Session 的这一列的文本添加到剪贴板中,每行一个 Session |
Terse Summary | 把选中 Session 的简要说明复制到剪贴板中。简要说明中包括请求方法、URL、响应的状态码以及状态信息。如果响应是 HTTP/3xx 重定向,文本中也会包括响应头中 Location 字段的内容。当光标位于 Web Session 列表时,按下 CTRL + SHIFT + T 键也会执行该命令 |
Headers Only | 把 Session 的请求头复制到剪贴板中。既可以以纯文本格式,也可以以 HTML 格式复制,所以,在仅处理文本(如 notepad)的编辑器和支持富文本(如 Word)的编辑器中,复制结果会有不同。由于这是“默认”命令,双击子菜单 Copy 命令会复制请求头。如果光标定位在 Web Session 列表中,按下 CTRL + SHIFT + C 键也会执行该命令 |
Session | 把整个 Session 列表复制到剪贴板。支持以纯文本和 HTML 这两种格式进行复制,所以当粘贴到只支持纯文本额度编辑器和支持富文本的编辑器中时,显示结果会有差别。当光标定位在 Web Session 列表时,还可以按下 CTRL + SHIFT + S 键来执行该命令 |
Full Summary | 把 Web Session 列表中显示得到信息复制到剪贴板。各个列通过 tab 分割,这便于你把信息粘贴到 Excel 或其他编辑器中。当光标定位在 Web Session 列表时,按下 CTRL + C 键会执行该命令 |
Save 子菜单中包含了用于把流量保存到文件中的一些选项,如下表所示:
Save 菜单项 | ||
---|---|---|
All Sessions | 把 Web Session 列表中的所有 session 都复制到 SAZ 文件中 | |
...and Open as Local File | 把选中的 Session 的 respones bodies 分别保存到独立的文件中,然后根据响应的文件类型找 到对应的 handler 来打开文件。如果操作该选项时按住 CTRL 键,Windows 会提示你使用哪个 应用来打开该文件 | |
Selected Sessions | In ArchiveZip | 把 Web Session 列表中选中的 Session 保存到 SAZ 文件中 |
As Text | 把选中的所有 Session 一起保存到一个文本文件中 | |
As Text(Headers only) | 把选中 Session 的请求头和响应头一起保存到一个文本文件中 | |
Request | Entire Request | 把选中 Session 的请求头和请求体分别保存到独立的文件中 |
Request Body | 把选中的 Session 的请求体保存到独立的文件中 | |
Response | Entire Response | 把选中 Session 的响应头和响应体保存到独立的文件中,如果 需要创建的响应文件后续可以通过 AutoRe-sponder 进行重放 ,可以启用该选项 |
Response Body | 把选中 Session 的请求体保存到独立的文件中。如果你希望在 另一个程序单独打开响应体(如图像),而不受其 HTTP 响应 头干扰,可以启用该选项 |
Remove 有三个子菜单可以用于从 Web Session 列表中删除全部、选中或未选中的 Sessions。当光标定位在 Web Session 列表时,按下 CTRL + X、Delete 或 Shift + Delete 键可以分别激活这几个命令。
Comment… 菜单命令支持为一个或多个选中的 Web Session 增加或修改注释。
Mark 子菜单支持选择一种颜色来标记 Web Session 列表中的 Session。Session 的字体会根据选项相应加粗和着色。Unmark 选项会取消对选中的 Session 进行加粗,并把颜色恢复为默认颜色。
Replay 子菜单提供命令支持播放当前选中的请求,如下表所示:
菜单项 | 说明 |
---|---|
Reissue Request |
把选中的请求以原来的形式重新发送。如果执行该命令时也按下了 Shift 键,Fiddler 会弹出一个对话框,可以输入希望执行的次数。把光标置于 Web Session 列表中并按下 R 键就会执行该命令 |
Reissue Unconditionally |
如果需要无条件地反复发送选中的请求,增加请求头 If-Modified-Since 和 If-None-Match,可以告诉服务端不需要返回 HTTP/304 响应。如果在调用该命令时也按下 SHIFT 键,Fiddler 会弹出对话框,提示输入希望该请求被执行的次数。把光标定位到 Web Session 列表中并按下 U 键也会执行该命令 |
Reissue and Edit | 把选中的请求以原来的形式重新发送,在每个新的 Session 中设置请求断点,在请求被发送到服务器之前,使用 Fiddler 的 Inspector 修改请求 |
Revisit in IE | 在 IE 中把每个选中的请求导航到请求 URL。注意 IE 在导航时总是使用 GET 方法,而且使用自己的 header 和 cookie,不管 session 中提供的是什么 HTTP 方法和请求头 |
Select 子菜单支持使用当前选中的 Session 来选择其他 Session,如下表所示:
菜单项 | 说明 |
---|---|
Parent Request |
Parent Request 选项会尝试使用请求的 Referer 头和请求 ID 来查找当前请求的来源 Session。举个例子,假设你通过 JavaScript 执行该命令,选中的 Session 通常会是下载 JavaScript 文件的 HTML 页面。当光标定位在 Web Session 列表时,按下 P 键可以执行该命令 |
Child Request |
Child Request 选项会使用该请求的 URL 和请求 ID 来查找请求。例如你在 HTML Session 中执行该命令,通过该选项中的 Session 通常是 HTML 标记中的 CSS、JS 和 图像文件的访问请求。当光标定位在 Web Session 列表时,按下 C 键也会执行该命令 |
Duplicate Request |
选中 Web Session 列表中和当前 Session 的 URL 和 HTTP 方法相同的所有 Session |
Compare 命令只有当 Web Session 列表中仅选中两个 Session 时才可以用。当选中该命令,会把选中的这两个 Session 保存到临时文件中,然后启动配置好的比较工具,从而比较请求和响应。
COMETPeek 命令会保留正在执行的响应的“快照”,在响应完成前就可以查看部分内容。当 Web 应用采用 COMET 模式以流式向客户端返回数据时,才可以使用该命令。由于“流式”的含义就是永不结束,只有当服务端停止连接后,Fiddler 才会返回响应。
Abort Session 命令会种终止正在执行的请求,中断客户端和服务器之间的连接。
Clone Response 命令只有当 Web Session 列表中选中两个 Session,并且其中一个 Session 在断点处中止,而另一个 Session 已经运行完时才可用。该命令会把已经完成的 Session 的响应拷贝给暂停运行的 Session。借助这个功能可以复制之前捕捉到的(或修改的)响应并返回给后续的请求。
Unlock for Editing 菜单命令会释放某个选中的 Session,支持通过 Inspector 编辑已经执行完的 Session 的请求和响应。当光标定位在 Web Session 列表,可按下 F2 键来执行该命令。
Inspector in New Window 命令会打开一个 Session Inspector 窗口,从而使你在独立窗口中查看 Session 的请求、响应和属性。
Properties… 命令会打开 Session 属性窗口,显示当前选中的 Session 的信息,包括计时器、Session 标志位以及请求如何被转发的等信息。