HTTP/2 支持限制
⚠️ r0capture 对 HTTP/2 支持有限。
现状
HTTP/2 在 Android 上的部署情况复杂:
| HTTP/2 实现 | 来源 | r0capture 支持 |
|---|---|---|
| 系统 OkHttp HTTP/2 | 走系统 SSL 栈 | ✅ 可抓明文 |
| Cronet(Chromium) | 自带 BoringSSL 副本 | ⚠️ 可能抓到但栈不同 |
| App 自带 HTTP/2 库 | 自带 SSL | ❌ 视实现而定 |
为什么「暂未通用支持」
来自 README
暂不支持 HTTP/2、或 HTTP/3,该部分 API 在安卓系统上暂未普及或布署,为 App 自带,无法进行通用 hook。
HTTP/2 的多路复用、HPACK 头压缩在 SSL_read/SSL_write 层看到的是已解压的 HTTP/2 帧(明文),理论上可抓;但:
- 部分 App 用自带 HTTP/2 实现,不走系统 SSL 符号
- HPACK 压缩的帧需额外解压才能读懂
- 多路复用使一个 SSL 会话交错多个流,pcap 关联复杂
实际能抓到什么
走系统 SSL 栈的 HTTP/2(如 OkHttp 默认协商的 h2),SSL_read/SSL_write 仍能抓到 HTTP/2 帧明文,但需用 Wireshark 的 HTTP/2 解析器查看(能自动解 HPACK)。
替代方案
若 r0capture 抓不到目标 App 的 HTTP/2:
- 尝试
-ssl "*libssl*"或指定 App 自带 SSL 库 - 用 mitmproxy 做中间人(但需绕过 pinning)
- 反编译定位 App 的 HTTP/2 客户端实现