mirror of
https://github.com/python/cpython.git
synced 2025-11-01 06:01:29 +00:00
gh-70765: avoid waiting for HTTP headers when parsing HTTP/0.9 requests (#139514)
This commit is contained in:
parent
29616f3d2c
commit
13dc2fde8c
3 changed files with 49 additions and 0 deletions
|
|
@ -362,6 +362,43 @@ def test_head_via_send_error(self):
|
|||
self.assertEqual(b'', data)
|
||||
|
||||
|
||||
class HTTP09ServerTestCase(BaseTestCase):
|
||||
|
||||
class request_handler(NoLogRequestHandler, BaseHTTPRequestHandler):
|
||||
"""Request handler for HTTP/0.9 server."""
|
||||
|
||||
def do_GET(self):
|
||||
self.wfile.write(f'OK: here is {self.path}\r\n'.encode())
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
self.sock = self.enterContext(self.sock)
|
||||
self.sock.connect((self.HOST, self.PORT))
|
||||
|
||||
def test_simple_get(self):
|
||||
self.sock.send(b'GET /index.html\r\n')
|
||||
res = self.sock.recv(1024)
|
||||
self.assertEqual(res, b"OK: here is /index.html\r\n")
|
||||
|
||||
def test_invalid_request(self):
|
||||
self.sock.send(b'POST /index.html\r\n')
|
||||
res = self.sock.recv(1024)
|
||||
self.assertIn(b"Bad HTTP/0.9 request type ('POST')", res)
|
||||
|
||||
def test_single_request(self):
|
||||
self.sock.send(b'GET /foo.html\r\n')
|
||||
res = self.sock.recv(1024)
|
||||
self.assertEqual(res, b"OK: here is /foo.html\r\n")
|
||||
|
||||
self.sock.send(b'GET /bar.html\r\n')
|
||||
res = self.sock.recv(1024)
|
||||
# The server will not parse more input as it closed the connection.
|
||||
# Note that the socket connection itself is still opened since the
|
||||
# client is responsible for also closing it on their side.
|
||||
self.assertEqual(res, b'')
|
||||
|
||||
|
||||
def certdata_file(*path):
|
||||
return os.path.join(os.path.dirname(__file__), "certdata", *path)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue