HTTP не имеет состояния, так что он означает, поддерживая работу? - PullRequest
13 голосов
/ 19 мая 2011
Keep-Alive: 300
Proxy-Connection: keep-alive

Как мы знаем, HTTP-соединение закрывается при получении ответа на запрос, так что же это означает под keep-alive, может кто-нибудь уточнить это?

Ответы [ 5 ]

12 голосов
/ 19 мая 2011

Это означает, что можно держать соединение открытым, чтобы запросить дополнительные ресурсы, такие как, например, изображения и таблицы стилей.

6 голосов
/ 19 мая 2011

Как известно, HTTP-соединение закрывается при получении ответа на запрос

Что такое HTTP-соединение? На самом деле это сокет-соединение, по которому реализован HTTP. Только в HTTP1.0 соединение закрывается после каждого ответа. Чтобы сэкономить на стоимости установки соединения TCP / IP, HTTP1.1 указывает, что, если клиент не отправляет заголовок

Connection:close

или сервер возвращается с тем же заголовком, затем сокет остается открытым. Вы можете направить столько запросов, сколько хотите в этот сокет, и ответы будут возвращаться в том порядке, в котором они были запрошены. Для этого требуется, чтобы ответ либо отправлялся с использованием фрагментированной кодировки передачи, либо содержал заголовок длины содержимого, чтобы можно было определить / вычислить конец каждого ответа.

Заголовок proxy-connection снова отличается и связан только с диалогом между клиентом и прокси-серверами.

Я бы порекомендовал эту страницу как отличное руководство по протоколу.

HTTP Made Действительно Легко

3 голосов
/ 14 апреля 2015

На этот вопрос уже дан ответ и он принят, но я бы хотел объяснить подробнее:

Keep-alive не может поддерживать одно соединение вечно;приложение, работающее на сервере, определяет предел, с которым будет поддерживаться соединение, и в большинстве случаев вы можете настроить этот предел.

В HTTP / 1.1 по умолчанию используется Keep-alive.Если у клиентов есть дополнительные запросы, они будут использовать для них одно и то же соединение.

Термин без сохранения состояния не означает, что сервер не может поддерживать соединение.Это просто означает, что сервер не распознает никаких отношений между любыми двумя запросами.

1 голос
/ 19 мая 2011

Keep-alive не имеет никакого отношения к состоянию.

В сети одной из самых дорогостоящих операций является многократное открытие и закрытие соединений.Современные HTML-страницы, однако, технически просят вас сделать именно это: сначала получите страницу, затем получите каждый ресурс и повторяйте, пока у вас не будет всего.Поскольку это будет невероятно медленно, HTTP / 1.1 позволяет агентам поддерживать соединение, пока он не получит все, что хочет от сервера.

Keep-alive - это, по сути, веб-браузер, который сообщает серверу, чтобы он не зависал.

1 голос
/ 19 мая 2011

Протокол действительно не имеет состояния, но keep-alive указывает, что соединение между клиентом и сервером должно оставаться открытым.

Открытие TCP-соединения является относительно тяжелой операцией, и поддержание этого соединения открытым позволяет избежать затрат на настройку и разрыв соединения, связанных с открытием нового соединения.

...