/**/

Постоянное HTTP-соединение (англ. HTTP persistent connection), также называемые HTTP keep-alive или повторное использование соединений HTTP (англ. HTTP connection reuse) — использование одного TCP-соединения для отправки и получения многократных HTTP-запросов и ответов вместо открытия нового соединения для каждой пары запрос-ответ.

Новый протокол HTTP/2 расширяет эту идею, позволяя одновременные многократные запросы/ответы в одном соединении.

Функциональность

HTTP 1.0

При работе по протоколу HTTP 1.0 с подобным типом соединений нет официальной спецификации. По сути, это дополнение к существующему протоколу. Если браузер поддерживает постоянные соединения, он посылает дополнительный заголовок в запросе:

Connection: Keep-Alive

Затем, когда сервер получает такой запрос и генерирует ответ, он также добавляет в заголовок ответа

Connection: Keep-Alive

После этого соединение не разрывается, а остаётся открытым. Когда клиент отправляет ещё один запрос, он использует это же соединение. Так будет продолжаться до тех пор, пока клиент или сервер не решат, что обмен окончен, и одна из сторон завершит соединение.

HTTP 1.1

При работе по HTTP 1.1 все соединения считаются постоянными, если не обозначено иное. При этом постоянные соединения не используют сообщения keepalive, а просто позволяют передачу многократных запросов в одном и том же соединении. Тем не менее, время ожидания по умолчанию в httpd для Apache 1.3[2] и 2.0 составляет всего 15 секунд, а для Apache 2.2 и 2.4 лишь 5 секунд. Преимуществом короткого таймаута является возможность быстро отдать клиенту несколько компонентов веб-страницы, не блокируя при этом слишком долго в состоянии ожидания процессы или потоки сервера.

Достоинства

(плюс) Ниже загрузка ЦПУ и расход памяти (потому как открывается меньше соединений одновременно).

(плюс) Можно использовать HTTP pipelining (конвейерную обработку) запросов и ответов.

(плюс) Снижает вероятность перегрузки сети (меньше TCP соединений).

(плюс) Уменьшает лаги для последующих запросов (не нужно заново устанавливать TCP соединение).

(плюс) Ошибки HTTP возвращаются без закрытия соединения — клиенты могут пробовать новые команды, и, если они не поддерживаются сервером, послать повторный запрос в том же соединении, используя старую семантику.

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

Согласно RFC 7230, разделу 6.4, «клиент должен ограничить количество одновременных соединений к определённому серверу». Предыдущая версия спецификации HTTP/1.1 указывала конкретные максимальные значения, но в RFC 7230 «оказалось, что это непрактично для многих приложений… вместо этого… будьте благоразумны, открывая одновременные соединения». Эти рекомендации нацелены на улучшение времени отклика по HTTP и недопущения перегрузок сети. Если конвейерная обработка HTTP реализована правильно, дополнительные соединения не улучшат производительность, но могут привести к перегрузке сети.

Недостатки

(минус) Если клиент не закрывает соединение после того, как получил все необходимые данные, задействованные на поддержание соединения ресурсы сервера будут недоступны другим клиентам.

(минус) Насколько сильно это влияет на доступность сервера, и как долго ресурсы будут заняты, зависит от архитектуры и конфигурации сервера.

Использование в веб-браузерах

Все современные браузеры используют постоянные соединения, включая Google Chrome, Firefox, Internet Explorer (с версии 4.01), Opera (с версии 4.0) и Safari.

По умолчанию Internet Explorer версий 6 и 7 открывает 2 постоянных соединения, тогда как 8 версия — 6. Постоянные соединения закрываются после 60 секунд простоя, что переопределяется в реестре Windows.

В Firefox количество одновременных подключений можно настроить (на сервер, на прокси, всего). Постоянные соединения закрываются после 115 секунд простоя, что настраивается в конфигурации.


Источники:

(1) Материал из Википедии — свободной энциклопедии / https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%BD%D0%BE%D0%B5_HTTP-%D1%81%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5

Tags

Нет комментариев

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

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