# HTTP/2

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

## 1. 这是什么？ {#1-whats-it}

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

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

## 2. 优势 {#2-benefits}

* 检查通过 Proxyman 传输的应用和浏览器中的 HTTP/2 请求和响应。
* 追踪共享连接上的并发请求。
* 查看请求头、正文，以及正文之后发送的 Trailer 字段。
* 查看被抓取请求所使用的 HTTP 版本。
* 如已记录，可在 [Connection Log](https://proxyman.com/docs/zh-cn/basic-features/connection-log) 中查看上游协议。

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

## 3. 如何开启 {#3-how-to-enable-it}

1. 在 Mac 上打开 Proxyman v26.0.0 或更高版本。
2. 前往 **Proxyman → Settings → General**。
3. 在 **Proxy** 部分开启 **Use HTTP/2**。
4. 如需抓取 HTTPS 内容，请在客户端设备上安装并信任 Proxyman 证书。
5. 为应用或域名开启 [SSL Proxying](https://proxyman.com/docs/zh-cn/basic-features/ssl-proxying)。
6. 重新发起一个新请求，或刷新页面。

![Proxyman Settings 的 General 标签页，Use HTTP/2 选项位于端口号和录制选项下方并已勾选](https://proxyman.com/docs/assets/proxyman-settings-use-http2.jpg)

_开启 Use HTTP/2_

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

证书设置请参阅 [macOS 指南](https://proxyman.com/docs/zh-cn/debug-devices/macos)。远程设备必须信任该证书，并将流量通过你 Mac 上的 Proxyman 发送。请参阅 [iOS](https://proxyman.com/docs/zh-cn/debug-devices/ios-device) 或 [Android](https://proxyman.com/docs/zh-cn/debug-devices/android-device) 设置指南。

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

在脚本中，可以使用 `proxyman-cli http-version status` 或 `proxyman-cli http-version set prefer_http2`。语法和 JSON 输出请参阅 [HTTP 版本命令行指南](https://proxyman.com/docs/zh-cn/command-line#15-http-version)。

## 4. 可以抓取哪些内容 {#4-what-does-it-capture}

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

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

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

## 5. 如何检查协议 {#5-how-to-check-the-protocol}

该设置允许使用 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 中的连接信息 {#6-connection-info-in-connection-log}

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

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

```text
* 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](https://proxyman.com/docs/zh-cn/basic-features/custom-previewer-tab) 的 Request 下启用 **Connection Log**。所有字段说明请参阅 [Connection Log 指南](https://proxyman.com/docs/zh-cn/basic-features/connection-log)。

## 7. 故障排除 {#7-troubleshooting}

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

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

如果缺少 HTTPS 内容：

* 确认客户端的流量已经通过 Proxyman 发送。
* 检查证书是否受信任，以及该域名的 SSL Proxying 规则。
* 如果客户端拒绝证书，请参阅 [SSL 错误](https://proxyman.com/docs/zh-cn/troubleshooting/get-ssl-error-from-https-request-and-response)。

## 8. 相关指南 {#8-related-guides}

* [SSL Proxying](https://proxyman.com/docs/zh-cn/basic-features/ssl-proxying)
* [Connection Log](https://proxyman.com/docs/zh-cn/basic-features/connection-log)
* [Split View](https://proxyman.com/docs/zh-cn/basic-features/split-view)
* [Tab View](https://proxyman.com/docs/zh-cn/basic-features/multiple-tabs)
* [上游 ALPN 和 HTTP/2 Scripting 设置](https://proxyman.com/docs/zh-cn/scripting/snippet-code#upstream-alpn-and-http2-settings)
* [HTTP/2 发布博客](https://proxyman.com/posts/2026-09-19-http2-is-finally-here)
