HTTP Keep Alive и TCP поддерживают работу - PullRequest
42 голосов
/ 17 февраля 2012

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

Ответы [ 3 ]

55 голосов
/ 17 мая 2013

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

  • 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-соединение.

21 голосов
/ 18 апреля 2012

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

0 голосов
/ 10 июля 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...