aio-libs / aio-libs/aiohttp

Closing connection on client half close, not allowing response.

Đang mở
#3,659 4 bình luận 0 reaction 0 người được giao Xem trên GitHub
enhancement
Ngôn ngữ chính
Python
Star
16.5k
Fork
2.4k
Merge trung bình
17 giờ 22 phút
Pull request đã merge (30 ngày)
212

Mô tả

## Long story short

A http client sends a request to aiohttp and immediately sends a fin, closing their side of the connection. Aiohttp calls the handler to generate the response, but closes the connection rather than sending it.

This is caused by [eol_received](https://github.com/aio-libs/aiohttp/blob/7345ffbc9666ad825927d785f3492b78fc7a2755/aiohttp/web_protocol.py#L264) returning None, as per [Protocol](https://docs.python.org/3.6/library/asyncio-protocol.html#asyncio.Protocol.eof_received). Having this function return True, fixes this issue.

I haven't been able to find any issues with this fix, even cleanly closing the connection after the response. But I am no expert on aiohttp.

## Expected behavior

aiohttp sends the response to the client and then closes the connection. The client.py prints the headers of the response.

## Actual behavior

aiohttp closes the connection without sending the response. client.py simply prints:

> Received b''

## Steps to reproduce

client.py ( it only prints the headers of the response on success, but sufficient for this) :
````
import socket

HOST = '127.0.0.1'
PORT = 8080
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b'GET / HTTP/0.9\r\n\r\n')
s.shutdown(socket.SHUT_WR)
data = s.recv(1025)
print('Received', repr(data))
````

server.py:
````
import asyncio

from aiohttp import web

async def handle(request):
print("handling request: {}".format(request))
asyncio.sleep(0.1) # ensure the fin shows up.
return web.Response(text="Hello")

app = web.Application()
app.add_routes([web.get('/', handle)])
web.run_app(app)
````
Run server.py first then client.py on the same machine.

## Your environment

aiohttp as a server
aiohttp version 3.5.4
Reproduced on Ubuntu and OSX. Python 3.6.5.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.