One thing with these header fields Accept-Encoding, Host and Connection: The user might try to supply them as well. Maybe you should add them to the map instead? That way they would overwrite existing user headers. On the other hand, it would modify the user-supplied map. Then again, the HttpClient takes ownership of that anyway...