 <p>We ran into this and after a lot of time trying to debug, I came across this: <a href="https://code.google.com/p/go/source/detail?r=d4e1ec84876c" rel="nofollow">https://code.google.com/p/go/source/detail?r=d4e1ec84876c</a></p> <blockquote> <p>This shifts the burden onto clients to read their whole response bodies if they want the advantage of reusing TCP connections.</p> </blockquote> <p>So be sure you read the entire body before closing, there are a couple of ways to do it. This function can come in handy to close to let you see whether you have this issue by logging the extra bytes that haven't been read and cleaning the stream out for you so it can reuse the connection:</p> <pre><code>func closeResponse(response *http.Response) error { // ensure we read the entire body bs, err2 := ioutil.ReadAll(response.Body) if err2 != nil { log.Println("Error during ReadAll!!", err2) } if len(bs) &gt; 0 { log.Println("Had to read some bytes, not good!", bs, string(bs)) } return response.Body.Close() } </code></pre> <p>Or if you really don't care about the body, you can just discard it with this:</p> <pre><code>io.Copy(ioutil.Discard, response.Body) </code></pre>