> For the complete documentation index, see [llms.txt](https://docs.proxyman.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.proxyman.com/basic-features/http2.md).

# HTTP/2

Capture HTTP/2 traffic in Proxyman for macOS and inspect requests, responses, trailers, and negotiated protocols.

## 1. What's it?

HTTP/2 lets several requests share one connection at the same time. Proxyman captures each request and response as a separate exchange, so you can inspect them with the usual previewers and debugging tools.

{% hint style="info" %}
HTTP/2 is available in the regular Proxyman macOS release from v26.0.0. It is off by default. A separate beta app is no longer needed.
{% endhint %}

## 2. Benefits

* Inspect HTTP/2 requests and responses from apps and browsers that use Proxyman.
* Follow concurrent requests on a shared connection.
* Read headers, bodies, and trailer headers sent after a body.
* Check the HTTP version used by a captured request.
* Inspect the upstream protocol in [Connection Log](/basic-features/connection-log.md), when recorded.

HTTP/2 uses header compression and connection reuse to reduce overhead. Results depend on the app, server, and network. Enabling it does not make every request faster.

## 3. How to enable it?

1. Open Proxyman v26.0.0 or later on your Mac.
2. Go to **Proxyman → Settings → General**.
3. In the **Proxy** section, turn on **Use HTTP/2**.
4. For HTTPS content, install and trust the Proxyman certificate on the client device.
5. Enable [SSL Proxying](/basic-features/ssl-proxying.md) for the app or domain.
6. Send a fresh request or reload the page.

{% hint style="warning" %}
Changing this setting closes existing connections. Send fresh requests afterward. Active WebSocket and Server-Sent Events connections may also need to reconnect.
{% endhint %}

For certificate setup, see the [macOS guide](/debug-devices/macos.md). A remote device must trust the certificate and send its traffic through Proxyman on your Mac. See the [iOS](/debug-devices/ios-device.md) or [Android](/debug-devices/android-device.md) setup guide.

To turn HTTP/2 off, uncheck **Use HTTP/2** in the same Settings section.

## 4. What does it capture?

Select a request in the main list to inspect the available details:

* Request method, URL, query parameters, cookies, and headers.
* Request and response bodies, such as JSON, form data, text, or binary content.
* Response status and headers.
* Request and response trailers, when present.
* Timing and HTTP version information.
* Recorded connection details, including upstream protocol negotiation.

Trailers are headers sent after the body. For gRPC traffic, check `grpc-status` and `grpc-message` in the headers or trailers. HTTP 200 alone does not prove the RPC succeeded. Binary payloads may need further decoding.

## 5. How to check the protocol?

The setting allows HTTP/2 with HTTP/1.1 fallback. It does not guarantee that every request uses HTTP/2.

There are two connections:

* The client connection, from your app or browser to Proxyman.
* The upstream connection, from Proxyman to the server.

These connections can use different HTTP versions. Check the request's HTTP version for the client connection. Open **Connection Log** in the Request panel to inspect the upstream protocol, when recorded.

* `h2` means HTTP/2.
* `http/1.1` means HTTP/1.1.
* An offered protocol is not proof that the server selected it. Check the accepted protocol.
* Older saved captures may lack upstream protocol details. Missing data does not mean HTTP/1.1.

## 6. Connection info in Connection Log

* Select a request, then open **Connection Log** in the Request panel, next to **Summary**.
* Read a log similar to `curl -v`, with DNS results, connection attempts, TLS and certificate details, and HTTP headers.
* Check `ALPN: server accepted h2` to confirm the upstream connection uses HTTP/2. Reused connections are marked with `Re-using existing connection`.
* `*` marks connection events, `>` marks the request, and `<` marks the response.

Example excerpt with sample values:

```
* 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
```

If the tab is hidden, enable **Connection Log** under Request in [Custom Previewer Tab](/basic-features/custom-previewer-tab.md). See the [Connection Log guide](/basic-features/connection-log.md) for all fields.

## 7. Troubleshooting

If a request still uses HTTP/1.1:

* Check **Use HTTP/2**, then send a fresh request.
* Confirm the client supports and negotiates HTTP/2.
* Check whether the upstream server supports HTTP/2. Fallback may be expected.
* Inspect both connections before deciding which side used HTTP/1.1.

If HTTPS content is missing:

* Check that the client sends its traffic through Proxyman.
* Check certificate trust and the domain's SSL Proxying rule.
* If the client rejects the certificate, see [SSL errors](/troubleshooting/get-ssl-error-from-https-request-and-response.md).

## 8. Related guides

* [SSL Proxying](/basic-features/ssl-proxying.md)
* [Connection Log](/basic-features/connection-log.md)
* [Split View](/basic-features/split-view.md)
* [Tab View](/basic-features/multiple-tabs.md)
* [Upstream ALPN and HTTP/2 Scripting settings](/scripting/snippet-code.md#upstream-alpn-and-http2-settings)
* [HTTP/2 release blog](https://proxyman.com/posts/2026-09-19-http2-is-finally-here)
