提交 9c927ffb 编写于 作者: B Bulat Khasanov

Fix extra data sending at HEAD response with Transfer-Encoding: Chunked

上级 ff985fe5
......@@ -511,7 +511,10 @@ class HTTP1Connection(httputil.HTTPConnection):
% self._expected_content_remaining
)
if self._chunking_output:
if not self.stream.closed():
assert self._request_start_line
if not self.stream.closed() and (
self.is_client or self._request_start_line.method != "HEAD"
):
self._pending_write = self.stream.write(b"0\r\n\r\n")
self._pending_write.add_done_callback(self._on_write_complete)
self._write_finished = True
......
......@@ -770,6 +770,12 @@ class KeepAliveTest(AsyncHTTPTestCase):
# be written out in chunks.
self.write("".join(chr(i % 256) * 1024 for i in range(512)))
class TransferEncodingChunkedHandler(RequestHandler):
@gen.coroutine
def head(self):
self.write("Hello world")
yield self.flush()
class FinishOnCloseHandler(RequestHandler):
def initialize(self, cleanup_event):
self.cleanup_event = cleanup_event
......@@ -790,6 +796,7 @@ class KeepAliveTest(AsyncHTTPTestCase):
[
("/", HelloHandler),
("/large", LargeHandler),
("/chunked", TransferEncodingChunkedHandler),
(
"/finish_on_close",
FinishOnCloseHandler,
......@@ -943,6 +950,16 @@ class KeepAliveTest(AsyncHTTPTestCase):
self.assertEqual(self.headers["Connection"], "Keep-Alive")
self.close()
@gen_test
def test_keepalive_chunked_head_no_body(self):
yield self.connect()
self.stream.write(b"HEAD /chunked HTTP/1.1\r\n\r\n")
yield self.read_headers()
self.stream.write(b"HEAD /chunked HTTP/1.1\r\n\r\n")
yield self.read_headers()
self.close()
class GzipBaseTest(object):
def get_app(self):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册