mirror of
https://github.com/python/cpython.git
synced 2025-10-10 00:43:41 +00:00
Issue #16833: In http.client.HTTPConnection, do not concatenate the request headers and body when the payload exceeds 16 KB, since it can consume more memory for no benefit.
Patch by Benno Leslie.
This commit is contained in:
parent
f422676423
commit
90e4774558
4 changed files with 42 additions and 2 deletions
|
@ -27,8 +27,10 @@ class FakeSocket:
|
|||
self.text = text
|
||||
self.fileclass = fileclass
|
||||
self.data = b''
|
||||
self.sendall_calls = 0
|
||||
|
||||
def sendall(self, data):
|
||||
self.sendall_calls += 1
|
||||
self.data += data
|
||||
|
||||
def makefile(self, mode, bufsize=None):
|
||||
|
@ -558,6 +560,28 @@ class BasicTest(TestCase):
|
|||
self.assertEqual(resp.read(), b'')
|
||||
self.assertTrue(resp.isclosed())
|
||||
|
||||
def test_delayed_ack_opt(self):
|
||||
# Test that Nagle/delayed_ack optimistaion works correctly.
|
||||
|
||||
# For small payloads, it should coalesce the body with
|
||||
# headers, resulting in a single sendall() call
|
||||
conn = client.HTTPConnection('example.com')
|
||||
sock = FakeSocket(None)
|
||||
conn.sock = sock
|
||||
body = b'x' * (conn.mss - 1)
|
||||
conn.request('POST', '/', body)
|
||||
self.assertEqual(sock.sendall_calls, 1)
|
||||
|
||||
# For large payloads, it should send the headers and
|
||||
# then the body, resulting in more than one sendall()
|
||||
# call
|
||||
conn = client.HTTPConnection('example.com')
|
||||
sock = FakeSocket(None)
|
||||
conn.sock = sock
|
||||
body = b'x' * conn.mss
|
||||
conn.request('POST', '/', body)
|
||||
self.assertGreater(sock.sendall_calls, 1)
|
||||
|
||||
class OfflineTest(TestCase):
|
||||
def test_responses(self):
|
||||
self.assertEqual(client.responses[client.NOT_FOUND], "Not Found")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue