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

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

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

Например:

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

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 за каждый запрос уменьшить нагрузку на систему.

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

1 ответ

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

См. 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

Другие вопросы по тегам