Я знаю, что это старый вопрос, но все же:
HTTP Keep-Alive - это функция, которая позволяет HTTP-клиенту (обычно браузеру) и серверу (веб-серверу) отправлять несколько пар запрос / ответ по одному и тому же TCP-соединению. Это уменьшает задержку для 2-го, 3-го, ... HTTP-запроса, уменьшает сетевой трафик и тому подобное.
TCP keepalive - это совершенно другой зверь. Он держит TCP-соединение открытым, посылая небольшие пакеты. Кроме того, когда пакет отправляется, это служит проверкой, поэтому отправитель уведомляется, как только разрывается соединение (обратите внимание, что это НЕ так, в противном случае - до тех пор, пока мы не попытаемся установить связь через TCP-соединение, мы не имеем представления, нормально ли это ).
Чтобы ответить на ваши вопросы о HTTP Keep-Alive:
How is HTTP Keep Alive implemented?
Проще говоря, HTTP-сервер не закрывает TCP-соединение после каждого ответа, а некоторое время ожидает, если какой-либо другой HTTP-запрос также пройдет через него. По истечении некоторого времени он все равно закрывается.
Does it internally use TCP Keep Alive?
Нет, по крайней мере, я не вижу в этом смысла.
If not, how does the server detect if the client is dead or alive?
Нет, не нужно. Если клиент отправит запрос, он получит ответ. Если клиент ничего не отправляет по TCP-соединению (возможно, из-за того, что соединение не работает), тайм-аут закроет соединение; Клиент, конечно, заметит это и при необходимости отправит запрос через другое TCP-соединение.