http request的Response body我不看也要关闭吗?
Do I need to close Response body of http request even if I don't read it?
我有以下代码:
resp, err = http.Head("http:something.com")
if err != nil {
//do something
}
if resp.StatusCode == http.StatusOK {
// do something
}
因为我没有阅读 resp
的正文,所以我假设我不需要像 resp.Body.Close()
那样关闭它。我的假设是否正确,还是我仍应调用 resp.Body.Close()
?
http.Head()
is a wrapper around DefaultClient.Head()
which issues Client.Do()
其中记录了:
If the returned error is nil, the Response will contain a non-nil Body which the user is expected to close. If the Body is not both read to EOF and closed, the Client's underlying RoundTripper (typically Transport) may not be able to re-use a persistent TCP connection to the server for a subsequent "keep-alive" request.
这应该足以让您关闭它。
即使您使用的是 HTTP HEAD 方法,这也只是对服务器的“推荐”。不符合 RFC 的服务器可能 return 主体,即使它不应该(对于 HEAD 请求),Go 的 net/http
库可以通过 Response.Body
提供主体。所以你应该关闭它。即使没有尸体被送到或呈现给你,关闭它也没有坏处。
我有以下代码:
resp, err = http.Head("http:something.com")
if err != nil {
//do something
}
if resp.StatusCode == http.StatusOK {
// do something
}
因为我没有阅读 resp
的正文,所以我假设我不需要像 resp.Body.Close()
那样关闭它。我的假设是否正确,还是我仍应调用 resp.Body.Close()
?
http.Head()
is a wrapper around DefaultClient.Head()
which issues Client.Do()
其中记录了:
If the returned error is nil, the Response will contain a non-nil Body which the user is expected to close. If the Body is not both read to EOF and closed, the Client's underlying RoundTripper (typically Transport) may not be able to re-use a persistent TCP connection to the server for a subsequent "keep-alive" request.
这应该足以让您关闭它。
即使您使用的是 HTTP HEAD 方法,这也只是对服务器的“推荐”。不符合 RFC 的服务器可能 return 主体,即使它不应该(对于 HEAD 请求),Go 的 net/http
库可以通过 Response.Body
提供主体。所以你应该关闭它。即使没有尸体被送到或呈现给你,关闭它也没有坏处。