@pythonMyLife

Почему Chrome бесконечно посылает пустые запросы?

Я пытаюсь освоить веб-разработку на Python с asyncio. Я создаю сервер при помощи .start_server и .serve_forever. Привожу код обработки запроса:
async def handle_client (reader, writer):
    print (f'New client!')
    request = None

    while request != 'quit':
        request = (await reader.read (1024)).decode ()

        response = generate_responce (request)

        writer.write (response.encode ())
        await writer.drain ()

    writer.close ()

def generate_responce (request: str) -> str:
    print (f'REQUEST: {request !r}')

    if request == '': return 'NO REQUEST' #(1)

    method, url = parse_request (request)
    headers, code = generate_headers (method, url)

    return headers + 'Hello World!'

def parse_request (request: str) -> tuple[str]:
    method, url, *_ = request.split (' ', maxsplit = 3)

    return method, url

def generate_headers (method: str, url: str) -> tuple[str, int]:
    if method != 'POST':
        return 'HTTP/1.1 405 Method not allowed\n\n', 405

    if url != '/':
        return 'HTTP/1.1 404 Not Found\n\n', 404

    return 'HTTP/1.1 200 OK\n\n', 200


(1) Сделано из-за бесконечных пустых запросов

Запускаю, открываю в Chrome локалхост и в консоли получаю подобное:
New client!
New client!
REQUEST: 'GET / HTTP/1.1\r\nHost: localhost:5692\r\nConnection: keep-alive\r\nCache-Control: max-age=0\r\nsec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="97", "Chromium";v="97"\r\nsec-ch-ua-mobile: ?0\r\nsec-ch-ua-platform: "Windows"\r\nDNT: 1\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\nSec-Fetch-Site: none\r\nSec-Fetch-Mode: navigate\r\nSec-Fetch-User: ?1\r\nSec-Fetch-Dest: document\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7\r\n\r\n'
REQUEST: ''
REQUEST: ''
REQUEST: ''
REQUEST: ''
REQUEST: ''
REQUEST: ''
REQUEST: ''
REQUEST: ''
...

И так далее, пока я не прерву процесс. И только после прерывания моё убожество показывается в Chrome.
Есть ли способ это исправить?

P. S.: Код нагло позаимствован из видео 2018 г..
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
Vindicar
@Vindicar
while request != 'quit':

И впрямь, почему программа циклится...
Если бы только в документации было описано поведение read(), когда соединение к клиенту закрыто!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы