A RequestRewriter must be set (even if just the do-nothing ANONYMOUS rewriter) before a server can be contacted. (The Fetcher cannot make assumptions and default to an anonymous access attempt, since we do not want to spam requests to a server which requires login before the login rewriter is ready).
The underlying fetch can throw a TypeError on network/CORS errors. If the server responds with a readable error, an HttpError will be thrown, attempting to parse the server's error response into a JSON object if possible. (The assumption is that it'll be of the type given as the generics ErrorT, but nothing technically enforces this). If the error response cannot be parsed as JSON, it'll be reported in the {@link HttpError#errorString} instead-