Fiddler Everywhere 与 Classic Web 调试手册
先决定你运行的是 Everywhere 还是 Classic
“打开 Fiddler”在团队里可能指两套不同产品线。Fiddler Everywhere 是 Windows、macOS 和 Linux 上的跨平台桌面产品,账号、订阅、Rules、Composer、共享能力和应用自己的本地状态都属于它的控制面。Fiddler Classic 是 Windows 上的遗留桌面工具,FiddlerScript、扩展、WinINET 行为和 .saz 工作流积累较多。两者都能观察 HTTP(S),但菜单、规则格式、授权、自动化和升级路径不能互换。
新建跨平台团队基线时优先确认 Fiddler Everywhere 的实际版本和许可;只有现有脚本、扩展或支持流程明确依赖 Classic 时才继续保留 Classic。问题单必须写清产品名和版本,不能只写“Fiddler 抓不到”。同一台 Windows 机器同时运行两者还会争用系统代理或监听端口,先关闭另一套产品再做最小实验。
Fiddler Everywhere 启动后的系统捕获默认先处理非加密 HTTP。选择系统捕获前,用一个显式代理请求证明监听端点存在,比依赖桌面应用自动修改系统代理更容易分型。界面没有会话时,依次确认 capture source、监听端口、客户端代理来源、VPN/虚拟网卡、localhost 绕过和界面过滤器。Fiddler 已接管系统代理不代表 Java、容器、命令行或自带网络栈的应用一定跟随。
curl --proxy http://127.0.0.1:8866 http://example.com/ \
-o /dev/null -w '%{http_code}\n'端口以当前 Settings 显示为准。若显式请求进入 Live Traffic,而目标应用仍不出现,差异在客户端代理选择;若显式请求也连接失败,才检查 Fiddler 进程、监听地址和端口。Filters 可能让会话存在但不可见,排障初期先清空过滤条件,再按 host、状态码和进程逐步收窄。
HTTPS 捕获有两份信任判断
Fiddler Everywhere 的 Settings > HTTPS 管理 HTTPS 解密。官方默认是关闭 Capture HTTPS traffic;启用前必须由应用生成并信任 Fiddler root CA。Windows 和 macOS 可以选择 User Store,Windows 还可以选择需要管理员权限的 Machine Store;Linux 需要导出证书并按目标系统手工信任。
个人开发机优先使用 User Store,因为影响范围只覆盖当前用户。Machine Store 会让同机所有用户都可能信任该 CA,只有共享机器确有需求、拥有审批和回收责任时才使用。Reset 会移除当前 CA、生成并信任新 CA,旧客户端不会自动信任新根;Remove 会从证书库删除 CA,并使 HTTPS 捕获停止工作。这些动作都改变信任状态,不能当作无害的“重试按钮”。
打开 HTTPS 捕获后,用受控测试服务制造一组正反证据。请求应有唯一调试头,客户端状态码、Fiddler Inspectors 中的明文和服务端日志必须一致。随后移除本次调用的 CA 信任或换到未信任该根的测试客户端,预期只剩 CONNECT 或出现证书错误;恢复信任后成功,才能证明故障点在客户端到 Fiddler 的 TLS。
Fiddler 还要验证 Fiddler 到真实服务的上游证书。Ignore server certificate errors 会关闭或缩小这一安全判断,不能用来掩盖测试服务的错误链。若确需验证一个已知开发端点,应只把该 endpoint 放入允许范围,并在结束后删除;空列表配合启用开关可能忽略全部上游错误,会让 Fiddler 自身暴露在错误服务身份或另一次拦截中。
浏览器能解密而 Java 不能,通常不是 Fiddler 会话问题,而是 Java 使用自己的 truststore。应给目标 JVM 指定临时 truststore,记录 java.home、alias 和指纹,再按 keytool 的方法回收。移动设备需要把代理指向开发机,并单独安装 CA;开放远程客户端时同时限制监听网卡、主机防火墙和测试设备来源,不能把一个无认证代理暴露给整段网络。
Inspectors 负责读事实,Filters 只改变视野
Live Traffic 中的一条 session 包含请求、响应、连接和时序。Inspectors 用结构化视图读取 headers、query、cookies、body、JSON、WebSocket 或原始字节。先看总览里的 URL、状态码、进程和时间,再进入具体 body;直接在数千条会话里全文搜索容易把第三方遥测、刷新请求和旧会话当成当前故障。
Filters 不会阻止客户端请求,也不会修改上游,它只控制当前会话列表显示。为了共享排障步骤,可以把过滤条件写成“测试 host + 调试头 + 相对时间窗口”,而不是仅靠人工选中。过滤前后会话总数变化要可解释,避免因为隐藏了 302、预检请求或重试而得出错误的单请求结论。
响应体可能经过 gzip、Brotli、分块或流式传输。Inspectors 展示的解码内容不一定等同于线路上的原始字节;协议差异需要 Raw、Headers 和 Timeline 交叉观察。HTTP/2 多路复用、WebSocket 和长连接也会改变传统“一请求一连接”的直觉。涉及真实包级行为时,应再用 Wireshark 或服务端 trace 复核。
Rules 是可执行改写,不是界面标签
Fiddler Everywhere 的 Rules 可以匹配 URL、method、status、header 或 body,并执行返回状态、修改 header/body、延迟、关闭连接等动作。它适合重现客户端错误分支,但规则一旦启用就会改变流量。先完成纯观察基线,再建立只命中测试 host 和固定调试标识的规则。
例如验证客户端对维护状态的处理时,规则只对 api.example.test、/health 和 X-Debug-Case: fiddler-503 生效,返回 503 并加入 X-Debug-Proxy: fiddler。客户端收到预期状态和响应头、服务端没有该请求,证明命中的是本地短路;移除调试头后请求应再次到达服务端。规则名称应写出场景、目标和失效条件,任务结束禁用并删除临时 preset。
规则修改响应体时要同步考虑编码、Content-Type、压缩和 Content-Length。对登录、支付、文件上传和真实身份流量做广泛 body 替换风险很高,调试应使用合成账号和最小数据。规则集合如果要进入团队仓库,需要代码式评审:匹配范围、凭证处理、预期输出、失败语义、停止条件和回滚必须可读,不能只分享界面截图。
Fiddler Classic 的 FiddlerScript 与扩展也能改写请求和响应,但它们属于另一套执行环境。迁移到 Everywhere 前要逐条确认能力映射,不能假设脚本复制后语义不变。Classic 若继续存在,应冻结受支持版本、扩展来源和 Windows 运行边界,并给退出迁移设定明确触发条件。
Composer 把观察到的请求变成受控实验
Composer 用于构造和发送 HTTP 请求。它比在原会话上直接重放更适合显式编辑 method、URL、headers 和 body,但复制会话时可能把 Authorization、Cookie、CSRF token 和个人数据一并带入。第一步不是点击 Execute,而是删掉不需要的身份和追踪字段,换成测试账号与语义化占位符。
一次有价值的 Composer 对照只改变一个变量。例如先发送原始 If-None-Match 得到 304,再移除该头得到 200;或者保持请求体不变,只替换测试环境的过期 token。两次请求应使用新的调试标识并在服务端日志中可区分。Composer 发出的请求是新的真实请求,可能产生写入副作用,不能把“它来自调试工具”当作安全隔离。
请求集合需要长期复用时,记录目标环境、账号级别、幂等性、前置数据和清理动作。能够用自动化测试或契约夹具稳定覆盖的场景,不应长期依赖某个人桌面上的 Composer 历史。
.saz、快照与云共享扩大了数据边界
Fiddler Classic 常用 .saz 保存 session archive;Everywhere 也能导入导出会话、生成快照并提供协作能力。这些文件可能包含完整 URL、Cookie、Authorization、请求与响应体、内部域名、设备信息和用户数据。自动 sanitization 可以降低部分风险,但不能证明非结构化、压缩、加密或二进制内容已经清除。
默认只导出必要会话,并在导出后再次人工审查。原始文件放进仅当前处理者可读的加密临时目录,问题系统只接收脱敏后的最小证据。使用云分享时,访问主体从本机操作者扩大到账号、组织和链接接收者,还要考虑订阅、保留策略、撤销能力与审计。团队安全政策不允许流量离开终端时,不启用云协作。
会话数量、body 大小和长连接会同时推高内存与磁盘。捕获前限定进程、host、path 和时间窗,测试大文件或流媒体时关闭不必要的 body 保存。达到容量阈值后应停止新捕获、保留最小现场并清空无关会话,而不是继续让桌面进程承担无界缓存。
关闭窗口之前先恢复代理和信任
退出顺序从影响最大的改写开始:禁用 Rules,停止 Replay/Composer 任务,关闭 capture source,再恢复系统、浏览器和移动设备代理。随后在 HTTPS Settings 使用 Remove 撤销 Fiddler CA;若曾放入 Machine Store,要以管理员身份验证所有用户范围都已回收。最后清理 .saz、快照、导出、共享链接和临时证书。
直连测试服务应恢复成功,显式连接已关闭的本地代理端口应失败;证书库里不再存在 Fiddler root CA;进程和监听端口消失;测试规则加入的 header 不再出现。Classic 还要检查 WinINET 代理、启动项、FiddlerScript 和扩展残留,不能只卸载程序文件。
跨平台 GUI、Inspectors、Rules 与协作是 Fiddler Everywhere 的优势;Windows 遗留脚本和 SAZ 资产才是继续保留 Classic 的理由。偏向 Map/Breakpoints 的桌面移动端调试可用 Charles,需要脚本化 addon、无头运行和 CI 夹具则进入 mitmproxy。选型首先看身份、数据和自动化边界,不看三套界面谁更像个人习惯。
