diff options
| author | Nicholas S. Husin <nsh@golang.org> | 2026-01-21 22:46:21 -0500 |
|---|---|---|
| committer | Nicholas Husin <nsh@golang.org> | 2026-02-02 09:54:16 -0800 |
| commit | 11d5284363ed88b8cc8ec6e68db80a16b2f9e708 (patch) | |
| tree | d5ecdce5042c715d8ae460f845844e06378a532b /src/net/http/export_test.go | |
| parent | d99be5c44449a3a40a62942272e99642962a37d9 (diff) | |
| download | go-11d5284363ed88b8cc8ec6e68db80a16b2f9e708.tar.xz | |
net/http: try to drain response body upon closing for better connection re-use
Currently, we have a rather inconsistent behavior in terms of whether a
connection can be re-used or not when an HTTP body is not read to
completion:
- In HTTP/2, not reading bodies to completion is not an issue, since a
new HTTP/2 stream can be created on the same TCP connection.
- In HTTP/1 server, we discard up to 256 KiB of unconsumed request body,
to potentially allow re-use.
- In HTTP/1 client, we do not do anything, and fail to re-use a TCP
connection if there are any unconsumed response body at all.
This has led to some confusion. For example, some users have mistakenly
discarded response body for HTTP/2 when doing so is not needed. Manually
discarding response body can also be disadvantageous if the body is
excessively large or is a never-ending stream.
To solve this issue, this CL makes it so that closing a response body
will cause any remaining content to be drained, up to a limit of 256 KiB
or 50 milliseconds, whichever one is reached first. This allows better
connection re-use for HTTP/1, and most users can now avoid having to
manually drain their response body.
For #77370
Change-Id: I71e1227fc9cf5f901362c8e234320817f6b0be24
Reviewed-on: https://go-review.googlesource.com/c/go/+/737720
Reviewed-by: Nicholas Husin <husin@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Damien Neil <dneil@google.com>
Diffstat (limited to 'src/net/http/export_test.go')
| -rw-r--r-- | src/net/http/export_test.go | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/net/http/export_test.go b/src/net/http/export_test.go index f2aa663a99..5492a97a98 100644 --- a/src/net/http/export_test.go +++ b/src/net/http/export_test.go @@ -33,6 +33,7 @@ var ( Export_shouldCopyHeaderOnRedirect = shouldCopyHeaderOnRedirect Export_writeStatusLine = writeStatusLine Export_is408Message = is408Message + MaxPostCloseReadTime = maxPostCloseReadTime ) var MaxWriteWaitBeforeConnReuse = &maxWriteWaitBeforeConnReuse |
