跳到主要内容

HTTP/2

在 macOS 版 Proxyman 中开启 HTTP/2,以抓取 HTTP/2 流量,并检查请求、响应、Trailer 字段以及协商出的协议。

1. 这是什么?​

HTTP/2 允许多个请求同时复用同一个连接。Proxyman 会将每个请求和响应分别作为独立的交换进行抓取,因此可以用常用的预览器和调试工具逐个检查。

信息

从 v26.0.0 起,HTTP/2 已包含在 Proxyman macOS 正式版中,默认关闭。无需再安装单独的 Beta 版应用。

2. 优势​

  • 检查通过 Proxyman 传输的应用和浏览器中的 HTTP/2 请求和响应。
  • 追踪共享连接上的并发请求。
  • 查看请求头、正文,以及正文之后发送的 Trailer 字段。
  • 查看被抓取请求所使用的 HTTP 版本。
  • 如已记录,可在 Connection Log 中查看上游协议。

HTTP/2 通过头部压缩和连接复用降低开销。实际效果取决于应用、服务器和网络。开启该功能并不能让每个请求都变快。

3. 如何开启​

  1. 在 Mac 上打开 Proxyman v26.0.0 或更高版本。
  2. 前往 Proxyman → Settings → General。
  3. 在 Proxy 部分开启 Use HTTP/2。
  4. 如需抓取 HTTPS 内容,请在客户端设备上安装并信任 Proxyman 证书。
  5. 为应用或域名开启 SSL Proxying。
  6. 重新发起一个新请求,或刷新页面。
Proxyman Settings 的 General 标签页,Use HTTP/2 选项位于端口号和录制选项下方并已勾选

开启 Use HTTP/2

注意

更改此设置会关闭现有连接,之后请重新发起请求。正在进行的 WebSocket 和 Server-Sent Events 连接可能也需要重新连接。

证书设置请参阅 macOS 指南。远程设备必须信任该证书,并将流量通过你 Mac 上的 Proxyman 发送。请参阅 iOS 或 Android 设置指南。

如需关闭 HTTP/2,请在同一 Settings 设置区域中取消勾选 Use HTTP/2。

在脚本中,可以使用 proxyman-cli http-version status 或 proxyman-cli http-version set prefer_http2。语法和 JSON 输出请参阅 HTTP 版本命令行指南。

4. 可以抓取哪些内容​

在主列表中选择一个请求,即可查看以下可用详情:

  • 请求方法、URL、查询参数、Cookie 和请求头。
  • 请求和响应正文,例如 JSON、表单数据、文本或二进制内容。
  • 响应状态和响应头。
  • 请求和响应的 Trailer 字段(如有)。
  • 耗时和 HTTP 版本信息。
  • 已记录的连接详情,包括上游协议协商。

Trailer 字段是正文之后发送的头字段。对于 gRPC 流量,请检查头部或 Trailer 中的 grpc-status 和 grpc-message。仅凭 HTTP 200 无法证明 RPC 调用成功。二进制负载可能需要进一步解码。

5. 如何检查协议​

该设置允许使用 HTTP/2,并在不支持时回退到 HTTP/1.1。但这并不保证每个请求都会使用 HTTP/2。

共有两条连接:

  • 客户端连接,即从应用或浏览器到 Proxyman 的连接。
  • 上游连接,即从 Proxyman 到服务器的连接。

这两条连接可以使用不同的 HTTP 版本。要检查客户端连接,请查看请求的 HTTP 版本。如已记录,可在 Request 面板中打开 Connection Log 查看上游协议。

  • h2 表示 HTTP/2。
  • http/1.1 表示 HTTP/1.1。
  • 客户端提供的协议并不代表服务器选择了该协议,请查看服务器接受的协议。
  • 较早保存的抓包可能缺少上游协议详情。缺少数据并不代表使用的是 HTTP/1.1。

6. Connection Log 中的连接信息​

  • 选择一个请求,然后在 Request 面板中打开 Connection Log(位于 Summary 旁边)。
  • 日志格式类似 curl -v,包含 DNS 解析结果、连接尝试、TLS 和证书详情以及 HTTP 头。
  • 查看 ALPN: server accepted h2 可确认上游连接使用了 HTTP/2。复用的连接会标记为 Re-using existing connection。
  • * 表示连接事件,> 表示请求,< 表示响应。

以下为包含示例值的日志片段:

* Host api.example.com:443 was resolved.
* IPv4: 192.0.2.10
* Connected to api.example.com (192.0.2.10) port 443
* ALPN: Proxyman offers h2,http/1.1
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256
* ALPN: server accepted h2
* using HTTP/2
> GET /profile HTTP/2
< HTTP/2 200 OK
* Connection #0 to host api.example.com left intact

如果该标签页被隐藏,请在 Custom Previewer Tab 的 Request 下启用 Connection Log。所有字段说明请参阅 Connection Log 指南。

7. 故障排除​

如果请求仍然使用 HTTP/1.1:

  • 确认已勾选 Use HTTP/2,然后重新发起请求。
  • 确认客户端支持并协商 HTTP/2。
  • 检查上游服务器是否支持 HTTP/2。回退到 HTTP/1.1 可能是正常现象。
  • 在判断哪一端使用了 HTTP/1.1 之前,请先检查两条连接。

如果缺少 HTTPS 内容:

  • 确认客户端的流量已经通过 Proxyman 发送。
  • 检查证书是否受信任,以及该域名的 SSL Proxying 规则。
  • 如果客户端拒绝证书,请参阅 SSL 错误。