Interested Article - Постоянное HTTP-соединение
- 2020-12-31
- 1
Постоянное 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.0 составляет всего 15 секунд, а для Apache 2.2 и 2.4 лишь 5 секунд. Преимуществом короткого таймаута является возможность быстро отдать клиенту несколько компонентов веб-страницы, не блокируя при этом слишком долго в состоянии ожидания процессы или потоки сервера.
Достоинства
- Ниже загрузка ЦПУ и расход памяти (потому как открывается меньше соединений одновременно).
- Можно использовать HTTP pipelining (конвейерную обработку) запросов и ответов.
- Снижает вероятность перегрузки сети (меньше TCP соединений).
- Уменьшает задержку для последующих запросов (не нужно заново устанавливать TCP соединение).
- Ошибки HTTP возвращаются без закрытия соединения — клиенты могут пробовать новые команды, и, если они не поддерживаются сервером, послать повторный запрос в том же соединении, используя старую семантику.
Эти достоинства особенно проявляются для защищённых HTTPS соединений, потому что создание защищённого соединения требует больше процессорного времени и сетевого обмена между клиентом и сервером.
Согласно , «клиент должен ограничить количество одновременных соединений к определённому серверу». Предыдущая версия спецификации HTTP/1.1 , но в «оказалось, что это непрактично для многих приложений… вместо этого… будьте благоразумны, открывая одновременные соединения». Эти рекомендации нацелены на улучшение времени отклика по 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.9166666666666666 минут) простоя, что настраивается в конфигурации.
Примечания
- . Дата обращения: 1 ноября 2015. 14 декабря 2016 года.
- . Дата обращения: 1 ноября 2015. 26 октября 2015 года.
- . Дата обращения: 1 ноября 2015. 31 октября 2015 года.
- . Дата обращения: 15 сентября 2012. 22 мая 2014 года.
- . Дата обращения: 1 ноября 2015. 31 октября 2015 года.
- Multiple (wiki). . Docforge . Дата обращения: 30 января 2010. Архивировано из 30 октября 2012 года.
- Nielssen, Frystyk Henryk; Gettys, James; Baird-Smith, Anselm; Prud’hommeaux, Eric; Wium Lie, Håkon; Lilley, Chris (October 1997), , Computer Communication Review , 27 (4), ISSN от 17 февраля 2011 на Wayback Machine
- . Opera Software (28 марта 2000). Дата обращения: 8 июля 2009. Архивировано из 10 сентября 2010 года.
- . Stevesouders.com (10 марта 2008). Дата обращения: 17 июля 2009. 10 августа 2009 года.
- . Microsoft (27 октября 2007). Дата обращения: 17 июля 2009. 22 июля 2009 года.
- . Mozillazine.org. Дата обращения: 17 июля 2009. 8 июня 2009 года.
Ссылки
- (англ.)
- (англ.)
- (англ.)
- (англ.)
- 2020-12-31
- 1