The RoundTrip contract states that the request body should be closed by RoundTrip, even when an error occurs.
The HTTP/2 RoundTrip does not close the request body in various situations:
- If the request is invalid: transport.go#1011 and in subsequent failures early in request processing.
- If an open slot cannot be acquired on the selected
ClientConn: transport.go#1026
- If a new request body is acquired from
GetBody: transport.go#550 (While the exact handling of bodies created by GetBody is not fully documented, the HTTP/1 RoundTrip implementation closes both the original Request.Body and every body returned by Request.GetBody.)