Oblivious HTTP Debugging Made Easy with Cloudflare pvcli

Article Content
In the modern internet ecosystem, privacy-preserving network architectures have transformed how sensitive user data travels across the web. However, the cryptographic mechanisms that safeguard user identities create a unique operational challenge for software engineers: the very opacity designed to prevent tracking makes network troubleshooting extraordinarily difficult. On July 27, 2026, Cloudflare addressed this technical friction by open-sourcing pvcli (privacy-client), an Apache-2.0 licensed command-line utility built specifically for inspecting, testing, and executing multi-hop privacy protocols like Oblivious HTTP (OHTTP). Functioning as a specialized, cryptographic equivalent to curl, pvcli provides developers, security researchers, and automated systems real-time visibility into privacy proxy interactions.
Prior to pvcli, diagnosing broken requests through privacy proxies required assembling custom scripts, manually parsing raw binary HTTP payloads, and cross-referencing cryptographic specifications. By releasing a unified, Rust-based tool hosted on GitHub under the Apache-2.0 open-source license, Cloudflare provides the broader tech ecosystem with the same operational tooling used internally to power privacy infrastructures like Apple’s iCloud Private Relay, Microsoft’s Edge Secure Network VPN, and Flo Health’s Anonymous Mode.
The Cryptographic Architecture of Oblivious HTTP
To understand why a dedicated debugging tool is necessary, one must examine the multi-hop structure of Oblivious HTTP, standardized by the IETF in RFC 9458. Standard HTTPS protects request contents from eavesdroppers on the network wire, but it explicitly exposes the client’s IP address to the destination server. This exposure allows backends to correlate user requests across sessions and build granular behavioral profiles over time.
Oblivious HTTP decouples user identity from request content by splitting trust across independent, non-colluding entities using Hybrid Public Key Encryption (HPKE) and application-layer proxying. The specification defines four primary roles in the request flow:
- The Client: Encrypts the plaintext HTTP request into an encapsulated binary payload using the gateway’s HPKE public key and sends it to the relay.
- The Oblivious Relay: A proxy hop operated by an independent third party. The relay knows the client’s IP address but cannot read the encrypted payload, target URL, or headers.
- The Oblivious Gateway: A server operated by or partnered with the target application. It decrypts the HPKE payload using its private key and forwards the request to the target origin. The gateway sees the request content but only knows the relay’s IP address, keeping the client anonymous.
- The Target Origin: The backend resource that executes the request and sends the response back through the gateway and relay to the client.
Through this architecture, neither proxy entity holds complete context: the relay knows who sent the message, while the gateway knows what was requested. This structural decoupling provides essential privacy guarantees for sensitive workloads such as telemetry collection, safe browsing lookups, and artificial intelligence queries.
The Operational Friction of Debugging Privacy Proxies
While the privacy properties of OHTTP are robust, operating multi-hop architectures introduces significant diagnostic tax. In a traditional client-server setup, network engineers debug errors like 502 Bad Gateway or 403 Forbidden using standard tools like curl to inspect TLS handshakes, HTTP headers, and status codes.
With OHTTP, standard utilities are insufficient. Payloads traveling across the network are encapsulated binary HTTP messages using media types like message/ohttp-req, message/ohttp-res, and application/ohttp-keys. Because the communication path spans multiple administrative domains, failures at any stage can manifest as opaque connection drops or cryptic encryption errors.
Engineers frequently run into complex failure modes during OHTTP deployment:
- Key Discovery and Parsing Errors: Failures while fetching or validating the gateway’s public key configuration from
/.well-known/ohttp-gateway, leading to ciphersuite mismatches. - Binary HTTP Framing Discrepancies: Serialization or unmarshalling errors when converting binary HTTP bytes to native memory structures across diverse runtimes.
- Relay Forwarding Failures: Transport errors during HTTP/2 or HTTP/3 CONNECT tunnel setup between client and relay.
- Gateway Origin ACL Violations: Rejections by gateway access control lists when target origin URLs fall outside permitted domain whitelists (such as
ALLOWED_TARGET_ORIGINS).
Written by
TempMail Ninja
Digital privacy and online security expert. Passionate about creating tools that protect users' identity on the internet.


