HTTP-клиент утекает соединения, когда включен keep-alive

Я настроил HTTP-сервер для встроенной системы для связи с известным не вредоносным удаленным клиентским приложением.

I мне пришлось отключить поддержку активности на моем сервере, поскольку удаленное клиентское приложение всегда запрашивает поддержку активности, но никогда не использует соединение повторно. Вместо этого клиент открывает новое соединение для каждого запроса и оставляет старое открытым на неопределенное время.

Например:

Клиент отправляет:

POST /my_server_path HTTP/1.1
accept: text/plain, */*; q=0.01
accept-encoding: gzip
connection: keep-alive
content-length: 4
content-type: application/x-www-form-urlencoded;charset=UTF-8
host: some_host:1234
origin: https://the_origin.com

test

Мой сервер отвечает:

HTTP/1.1 200 OK
access-control-allow-headers: post-body
access-control-allow-origin: https://the_origin.com
allow: POST, OPTIONS
connection: keep-alive
content-length: 4
content-type: text/html
date: Mon, 01 Feb 2018 15:00:00 GMT
server: MyServer/1.0

test

Хотя мой HTTP-сервер поддерживает закрытие устаревших соединений , Я начал отправлять Connection: closed для каждого запроса, чтобы снизить нагрузку на систему.

Это нормальное поведение, я что-то упускаю или правильно полагаю, что это ошибка удаленное клиентское приложение?

0
задан 6 February 2018 в 01:16
1 ответ

Хотя это и нехорошо, клиент может закрыть соединение и использовать другое. Конечно, глупо запрашивать keep-alive, а затем не использовать его, поэтому вы можете нацелить его как на ошибку, но это все же то, что может случиться. Это также может быть связано с прокси в пути.

См. RFC 7230 и обратите внимание на «МОЖЕТ»:

Клиент МОЖЕТ отправлять дополнительные запросы по постоянному соединению. пока он не отправит или не получит вариант "закрыть" соединение или не получит Ответ HTTP / 1.0 без опции соединения keep-alive

Вот почему сервер не должен поддерживать слишком много открытых соединений keep-alive в течение слишком долгого времени. Он может сигнализировать о своей политике клиенту с помощью заголовка Keep-Alive .

См. Параметры max и timeout , описанные в https: / /tools.ietf.org/id/draft-thomson-hybi-http-timeout-01.html

0
ответ дан 5 December 2019 в 06:38

Теги

Похожие вопросы