Learn
How network debugging actually works, underneath the buttons — written as we build Hollowport, not just documentation for it.
Networking
How HTTPS interception actually works on iOS and Mac
What it means to "decrypt" your own app's HTTPS traffic, why a certificate is required, how the trust step differs between iOS and Mac, and where the platform draws a hard line.
NetworkingWhy HTTP/2 traffic looks different in a proxy tool
HTTP/2 multiplexes many requests over one connection instead of opening a new one each time — here's what that means for anyone reading captured traffic.
NetworkingWhat actually happens during a TLS handshake
Before any HTTPS request is encrypted, your device and the server negotiate a handshake — the four steps that happen in those first few milliseconds, and why they matter for debugging.
NetworkingWhy gRPC and Protocol Buffers are hard to read without a schema
Protocol Buffers are compact and fast specifically because they don't include field names in the wire format — which is exactly what makes them unreadable without extra work.
Debugging
Debugging WebSockets: why the request/response model breaks down
A WebSocket isn't a request and a response — it's a long-lived, bidirectional stream of messages. That changes what "debugging it" actually means.
DebuggingThe difference between a flaky request and a flaky network
"It works, then it doesn't" has more than one possible cause, and conflating them wastes more debugging time than almost any other mistake in this category.
DebuggingDebugging GraphQL on iPhone: what to actually look at
GraphQL puts everything behind a single POST endpoint, which breaks the usual REST debugging habits — here's what to check instead.
DebuggingDebugging a 401: finding the actual cause, not just the status code
A 401 always means the same status code, but not the same problem — here's how to use the response itself, rather than guesswork, to find out which one you're actually looking at.
DebuggingSimulating a 500: testing how your app actually handles server failure
Real backends rarely fail on command, so testing your app's error-handling code usually means faking the failure yourself — here's which tool fits which situation.
DebuggingReproducing a flaky request: what Replay ×N can actually tell you
A single successful retry doesn't prove a bug is fixed. Here's how to get an actual answer about whether a request is flaky, and exactly what that answer can and can't tell you.