• Brad Fitzpatrick's avatar
    net/http: reuse client connections earlier when Content-Length is set · 01e3b4fc
    Brad Fitzpatrick authored
    Set EOF on the final Read of a body with a Content-Length, which
    will cause clients to recycle their connection immediately upon
    the final Read, rather than waiting for another Read or Close
    (neither of which might come).  This happens often when client
    code is simply something like:
    
      err := json.NewDecoder(resp.Body).Decode(&dest)
      ...
    
    Then there's usually no subsequent Read. Even if the client
    calls Close (which they should): in Go 1.1, the body was
    slurped to EOF, but in Go 1.2, that was then treated as a
    Close-before-EOF and the underlying connection was closed.
    But that's assuming the user even calls Close. Many don't.
    Reading to EOF also causes a connection be reused. Now the EOF
    arrives earlier.
    
    This CL only addresses the Content-Length case. A future CL
    will address the chunked case.
    
    LGTM=adg
    R=adg
    CC=golang-codereviews
    https://golang.org/cl/49570044
    01e3b4fc
Name
Last commit
Last update
..
http Loading commit data...
mail Loading commit data...
rpc Loading commit data...
smtp Loading commit data...
testdata Loading commit data...
textproto Loading commit data...
url Loading commit data...
cgo_bsd.go Loading commit data...
cgo_linux.go Loading commit data...
cgo_netbsd.go Loading commit data...
cgo_openbsd.go Loading commit data...
cgo_stub.go Loading commit data...
cgo_unix.go Loading commit data...
cgo_unix_test.go Loading commit data...
conn_test.go Loading commit data...
dial.go Loading commit data...
dial_gen.go Loading commit data...
dial_gen_test.go Loading commit data...
dial_test.go Loading commit data...
dialgoogle_test.go Loading commit data...
dnsclient.go Loading commit data...
dnsclient_unix.go Loading commit data...
dnsclient_unix_test.go Loading commit data...
dnsconfig_unix.go Loading commit data...
dnsconfig_unix_test.go Loading commit data...
dnsmsg.go Loading commit data...
dnsmsg_test.go Loading commit data...
dnsname_test.go Loading commit data...
empty.c Loading commit data...
example_test.go Loading commit data...
fd_mutex.go Loading commit data...
fd_mutex_test.go Loading commit data...
fd_plan9.go Loading commit data...
fd_poll_runtime.go Loading commit data...
fd_unix.go Loading commit data...
fd_unix_test.go Loading commit data...
fd_windows.go Loading commit data...
file_plan9.go Loading commit data...
file_test.go Loading commit data...
file_unix.go Loading commit data...
file_windows.go Loading commit data...
hosts.go Loading commit data...
hosts_test.go Loading commit data...
interface.go Loading commit data...
interface_bsd.go Loading commit data...
interface_bsd_test.go Loading commit data...
interface_darwin.go Loading commit data...
interface_dragonfly.go Loading commit data...
interface_freebsd.go Loading commit data...
interface_linux.go Loading commit data...
interface_linux_test.go Loading commit data...
interface_netbsd.go Loading commit data...
interface_openbsd.go Loading commit data...
interface_stub.go Loading commit data...
interface_test.go Loading commit data...
interface_unix_test.go Loading commit data...
interface_windows.go Loading commit data...
ip.go Loading commit data...
ip_test.go Loading commit data...
ipraw_test.go Loading commit data...
iprawsock.go Loading commit data...
iprawsock_plan9.go Loading commit data...
iprawsock_posix.go Loading commit data...
ipsock.go Loading commit data...
ipsock_plan9.go Loading commit data...
ipsock_posix.go Loading commit data...
ipsock_test.go Loading commit data...
lookup.go Loading commit data...
lookup_plan9.go Loading commit data...
lookup_test.go Loading commit data...
lookup_unix.go Loading commit data...
lookup_windows.go Loading commit data...
mac.go Loading commit data...
mac_test.go Loading commit data...
mockicmp_test.go Loading commit data...
mockserver_test.go Loading commit data...
multicast_test.go Loading commit data...
net.go Loading commit data...
net_test.go Loading commit data...
net_windows_test.go Loading commit data...
netgo_unix_test.go Loading commit data...
packetconn_test.go Loading commit data...
parse.go Loading commit data...
parse_test.go Loading commit data...
pipe.go Loading commit data...
pipe_test.go Loading commit data...
port.go Loading commit data...
port_test.go Loading commit data...
port_unix.go Loading commit data...
protoconn_test.go Loading commit data...
race.go Loading commit data...
race0.go Loading commit data...
sendfile_dragonfly.go Loading commit data...
sendfile_freebsd.go Loading commit data...
sendfile_linux.go Loading commit data...
sendfile_stub.go Loading commit data...
sendfile_windows.go Loading commit data...
server_test.go Loading commit data...
singleflight.go Loading commit data...
sock_bsd.go Loading commit data...
sock_cloexec.go Loading commit data...
sock_linux.go Loading commit data...
sock_plan9.go Loading commit data...
sock_posix.go Loading commit data...
sock_windows.go Loading commit data...
sockopt_bsd.go Loading commit data...
sockopt_linux.go Loading commit data...
sockopt_plan9.go Loading commit data...
sockopt_posix.go Loading commit data...
sockopt_windows.go Loading commit data...
sockoptip_bsd.go Loading commit data...
sockoptip_linux.go Loading commit data...
sockoptip_posix.go Loading commit data...
sockoptip_windows.go Loading commit data...
sys_cloexec.go Loading commit data...
tcp_test.go Loading commit data...
tcpsock.go Loading commit data...
tcpsock_plan9.go Loading commit data...
tcpsock_posix.go Loading commit data...
tcpsockopt_darwin.go Loading commit data...
tcpsockopt_openbsd.go Loading commit data...
tcpsockopt_plan9.go Loading commit data...
tcpsockopt_posix.go Loading commit data...
tcpsockopt_unix.go Loading commit data...
tcpsockopt_windows.go Loading commit data...
timeout_test.go Loading commit data...
udp_test.go Loading commit data...
udpsock.go Loading commit data...
udpsock_plan9.go Loading commit data...
udpsock_posix.go Loading commit data...
unicast_posix_test.go Loading commit data...
unix_test.go Loading commit data...
unixsock.go Loading commit data...
unixsock_plan9.go Loading commit data...
unixsock_posix.go Loading commit data...
z_last_test.go Loading commit data...