如何抓取 Google Chrome 和 macOS 应用的 HTTP/3 流量

如何抓取 Google Chrome 和 macOS 应用的 HTTP/3 流量 的封面图

阅读约需 5 分钟

1. 问题:HTTP/3 请求缺失

网站在 Google Chrome 中能正常加载,或 macOS 应用已收到响应,但 Proxyman 中却看不到对应请求。一种可能的原因是 HTTP/3,它使用基于 UDP 的 QUIC,而不是普通 HTTP 代理所处理的 TCP 连接。

  • 部分请求能够显示,另一些请求则绕过了抓取。
  • 仅安装 Proxyman 证书,无法让 QUIC 流量经过代理。
  • Mac 应用也可能忽略系统代理设置。

解决方法: 在 Proxyman 中启用 Network Extension 和 Use HTTP/2。对于支持的连接,扩展会让 HTTP/3 回退到 TCP,这样 Proxyman 就能通过 HTTP/2 抓取请求。

预期结果

  • 来自 Chrome 或 Mac 应用的新请求会出现在 Proxyman 中。
  • 设置证书信任和 SSL Proxying 后,即可读取 HTTPS 的请求头和正文。
  • 协商成功时,HTTP/2 会显示为抓取到的协议。下图中,上游服务器已接受 h2。
Proxyman 中的 HTTP/2 抓取示例:Connection Log 显示服务器已接受 h2
Proxyman 中的 HTTP/2 抓取示例:Connection Log 显示服务器已接受 h2

此流程会在 HTTP/3 回退到 HTTP/2 后抓取请求,无法解码原生 QUIC 流量。当 HTTP/2 不可用时,也可能回退到 HTTP/1.1。

2. HTTP/3 回退的工作原理

HTTP/3 改变了请求在网络中的传输方式,但它仍然承载熟悉的 HTTP 数据,例如 URL、请求头和响应正文。HTTP/3 标准描述了 QUIC 连接失败时回退到基于 TCP 的 HTTP 的做法。

抓取过程如下:

  1. Chrome 或应用尝试通过 UDP 端口 443 上的 QUIC 建立连接。
  2. 对于 Proxyman Network Extension 处理的流量,该连接会被拒绝。
  3. 支持回退的客户端会改为建立 TCP 连接。
  4. 启用 Use HTTP/2 后,Proxyman 可以协商 HTTP/2 并显示通信过程。

这样就可以调试 API 数据、登录请求和服务器错误。由于传输方式已改变,排查 HTTP/3 时序或 QUIC 特有的问题时,请使用原生的 QUIC 抓包工具。

3. 开始之前

  • 使用 macOS 26 或更高版本。
  • 安装最新的 Proxyman for macOS 直接下载版。
  • 使用 Network Extension 需要 Proxyman PRO。该扩展目前为 BETA 版,默认关闭,且在 Setapp 中不可用。
  • 请使用支持 TCP 回退的网站或应用。仅支持 HTTP/3 的客户端无法使用此方法。

本指南适用于在 Mac 上运行的应用。iPhone 和 Android 设备需要单独设置抓取。

4. 安装并启用 Network Extension

  1. 打开 Proxyman → Settings → Network Extension。
  2. 开启 Enable Network Extension。
  3. 如果出现 Install and Enable,请点击它。
在 Proxyman 设置中启用 Network Extension,以抓取 Chrome 和 macOS 应用的流量
在 Proxyman 设置中启用 Network Extension,以抓取 Chrome 和 macOS 应用的流量
  1. 打开 System Settings → General → Login Items & Extensions。
  2. 在 Extensions 下,选择 By Category → Network Extensions。
在 macOS 系统设置的“登录项与扩展”中找到 Network Extensions
在 macOS 系统设置的“登录项与扩展”中找到 Network Extensions
  1. 启用 Proxyman,然后在 macOS 询问是否添加网络配置时点击 Allow。
在 macOS 系统设置中允许 Proxyman Network Extension
在 macOS 系统设置中允许 Proxyman Network Extension
  1. 返回 Proxyman,等待它显示正在抓取本地应用 HTTP 和 HTTPS 流量的提示。

Network Extension 指南包含完整的安装步骤。抓取期间请保持 Proxyman 处于打开状态。

5. 在 Proxyman 中启用 HTTP/2

  • 打开 Proxyman → Settings → General。
  • 在 Proxy 部分开启 Use HTTP/2。
  • 修改设置后发起的新请求才会生效,现有连接会被关闭。
在 Proxyman 的 General 设置中开启 Use HTTP/2,以抓取 HTTP/3 回退流量
在 Proxyman 的 General 设置中开启 Use HTTP/2,以抓取 HTTP/3 回退流量

Proxyman v26.0.0 起支持 HTTP/2,默认关闭。HTTP/2 指南介绍了协议协商和回退机制。

设置 HTTPS 流量检查

  1. 打开 Certificate → Install a Certificate on this Mac…。
  2. 选择 Automatic Mode,确认安装,并检查是否显示 Installed & Trusted。
  3. 为要检查的应用或域名启用 SSL Proxying。你可以在侧边栏中右键点击它来启用。
  4. 重复该请求,使 Proxyman 能抓取解密后的内容。

如果尚未设置证书信任,请参阅 macOS 证书指南。Network Extension 负责转发连接,证书信任则让 Proxyman 能读取 HTTPS 内容。

6. 抓取 Google Chrome 或 macOS 应用的流量

Google Chrome

  • 使用 ⌘Q 完全退出 Chrome,然后重新打开,以建立新连接。
  • 访问要调试的网站,并重复触发请求的操作。
  • 在 Proxyman 中,于侧边栏选择 Chrome 或目标域名。
  • 选择某个请求,即可查看其请求头、查询参数、正文和响应。
  • 如果刷新页面没有发出新请求,请打开 Chrome DevTools,选择 Network → Disable cache,并在 DevTools 保持打开的状态下刷新页面。

macOS 应用

  • 启用 Network Extension 后,退出并重新打开应用。
  • 触发一次网络操作,例如刷新列表或加载个人资料。
  • 在 Proxyman 中选择该应用或其 API 域名。
  • 查看响应状态和正文,了解服务器返回的内容。

应用仍需信任 Proxyman 证书。即使回退正常工作,证书固定(Certificate Pinning)或独立的信任存储也可能阻止 HTTPS 检查。

7. 验证抓取到的 HTTP 版本

  • 检查应用与 Proxyman 之间连接的请求 HTTP 版本。
  • 在 Request 面板中打开 Connection Log,查看 Proxyman 与服务器之间的连接。
  • 查找 ALPN: server accepted h2,以确认上游使用 HTTP/2。
  • 检查最终接受的协议。仅提供包含 h2 的列表并不能作为确认依据。

这两段连接可以使用不同的 HTTP 版本。如需帮助解读结果,请参阅 Connection Log 指南。

8. 排查请求缺失问题

  • 没有任何显示: 检查 Network Extension 是否处于活动状态、录制是否已开启,以及过滤器是否隐藏了请求。然后重启目标应用。
  • HTTPS 内容仍然是加密的: 确认证书已被信任,并为实际的 API 域名启用 SSL Proxying。该域名可能与网站域名不同。
  • 抓取到的是 HTTP/1.1: 检查 Use HTTP/2 设置后重试。客户端和服务器各自的连接都必须支持 HTTP/2。
  • 应用无法连接: 检查证书错误,并确认该应用是否要求 HTTP/3 且不支持 TCP 回退。
  • 自定义 QUIC 服务缺失: 此回退仅处理 UDP 443 端口。其他端口上的 QUIC 不在本流程范围内。

完成后,请在 Proxyman 设置中关闭 Enable Network Extension,以停止通过该扩展进行抓取。

相关文章

Noah Tran
Noah Tran

抓取 Mac 上缺失的请求

下载 Proxyman for macOS,启用 Network Extension 和 HTTP/2,然后查看下一个请求。

下载 Proxyman for macOS