Функция соединения Keep-Alive в протоколе HTTP предназначена для уменьшения количества обращений TCP-соединения к веб-серверу. Он должен улучшить производительность веб-сервера. Однако я обнаружил, что некоторые веб-серверы намеренно отключают функцию KeepAlive на стороне сервера.
Насколько я понимаю, какой-то обратный прокси, то есть HAProxy, отключает HTTP keep-alive, чтобы уменьшить использование памяти, что в некоторых ситуациях более важно, чем использование ЦП.
Есть ли другая причина, по которой веб-сервер отключает Keep-Alive?
Keep alive предназначено для уменьшения количества tcp-настроек, которые являются болтливыми и сильно зависят от задержки. Его основная цель - повысить производительность клиента, поскольку для современной серверной ОС требуется невысокая стоимость настройки TCP-соединений.
Некоторые прокси / балансировщики нагрузки отключают сохранение активности для веб-серверов, потому что они предполагают наличие фактических серверов и находятся в локальной сети с незначительной задержкой и, следовательно, незначительными штрафами за установку TCP. Это также снижает сложность программного обеспечения балансировки, поскольку не обязательно существует взаимно однозначная связь между входящими и исходящими (с точки зрения LB) подключениями.
Есть несколько причин, по которым сервер отключит поддержку активности, поэтому я подозреваю, что это, вероятно, виноваты администраторы. Единственным исключением являются серверы a-child-per-connection (apache), где максимально быстрое освобождение этого дочернего потока / потока дает преимущества, даже если общее взаимодействие с браузером (и использование полосы пропускания) становится хуже.
Обратите внимание, что afaik keep-alive является дополнительной функцией, и для ее реализации не требуется никаких услуг.