假设我只想获取一个页面的cookie信息,并关心它返回的内容,也就是不读取Response.Body,是否还需要自己去关闭一下body呢(Response.Body.Close())?
第一次上来提问,方法不对的地方请见谅。
因该都不需要关闭手动关闭吧,下面是源码上面写的备注,说:
The Server will close the request body. The ServeHTTP
// Handler does not need to.
Body io.ReadCloser
// Body is the request's body.
//
// For client requests a nil body means the request has no
// body, such as a GET request. The HTTP Client's Transport
// is responsible for calling the Close method.
//
// For server requests the Request Body is always non-nil
// but will return EOF immediately when no body is present.
// The Server will close the request body. The ServeHTTP
// Handler does not need to.
Body io.ReadCloser
源码里面有如下:
func (c *conn) serve() {
....
serverHandler{c.server}.ServeHTTP(w, w.req)
if c.hijacked() {
return
}
w.finishRequest()
if w.closeAfterReply {
if w.requestBodyLimitHit {
c.closeWriteAndWait()
}
break
}
....
}
处理完毕以后标准库会自动关闭链接的。
#1
更多评论
是的,上一个是服务端,如果是模拟客户端的话应该都需要关闭的。
下面是源码注释:` // The http Client and Transport guarantee that Body is always
// non-nil, even on responses without a body or responses with
// a zero-length body. It is the caller's responsibility to
// close Body.`
#3