Подтвердить что ты не робот

HTTP Keep Alive и TCP сохраняются

Как реализуется HTTP Keep Alive? Использует ли он внутреннее использование TCP Keep Alive? Если нет, как сервер обнаруживает, что клиент мертв или жив?

4b9b3361

Ответ 1

HTTP Keep-Alive - это функция протокола HTTP. Веб-сервер, реализующий Keep-Alive Feature, должен периодически проверять соединение/сокет (для входящего HTTP-запроса) на временной промежуток, поскольку он отправил последний HTTP-ответ (в случае, если был соответствующий HTTP-запрос). Если HTTP-запрос не получен к моменту настроенного времени сохранения (в секундах), веб-сервер закрывает соединение. После "закрытия", выполняемого веб-сервером, дальнейший HTTP-запрос не будет возможен. С другой стороны, TCP Keep-Alive управляется ОС на уровне TCP. HTTP Keep-Alive и TCP Keep-Alive - это совершенно несвязанные вещи.

Ответ 2

Я знаю, что это старый вопрос, но все же:

  • HTTP Keep-Alive - это функция, которая позволяет HTTP-клиенту (обычно браузеру) и серверу (веб-серверу) отправлять несколько пар запросов/ответов по одному и тому же TCP-соединению. Это уменьшает задержку для второго, третьего,... 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-соединение, если это необходимо.

Ответ 3

http keep-alive просто заставляет tcp жить дольше, чтобы передать несколько запросов http. После таймаута keep-alive соединение tcp будет закрыто. tcp keep-alive - это всего лишь механизм, поддерживающий tcp-соединение, или проверка соединения tcp не закрыта