it feels a lot like how Go's HTTP library works