Постоянное HTTP-соединение

Поделись знанием:
Перейти к: навигация, поиск
HTTP
Постоянное соединение · Сжатие · HTTPS
Методы
OPTIONS · GET · HEAD · POST · PUT · DELETE · TRACE · CONNECT · PATCH
Заголовки
Cookie · ETag · Location · Referer
DNT · X-Forwarded-For
Коды состояния
301 Moved permanently
302 Found
303 See Other
403 Forbidden
404 Not Found
451 Unavailable for Legal Reasons

Постоянное 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 все соединения считаются постоянными, если не обозначено иное.[1] При этом постоянные соединения не используют сообщения keepalive, а просто позволяют передачу многократных запросов в одном и том же соединении. Тем не менее, время ожидания по умолчанию в httpd для Apache 1.3[2] и 2.0[3] составляет всего 15 секунд, а для Apache 2.2[4] и 2.4[5] лишь 5 секунд. Преимуществом короткого таймаута является возможность быстро отдать клиенту несколько компонентов веб-страницы, не блокируя при этом слишком долго в состоянии ожидания процессы или потоки сервера.[6]

Достоинства

  • Ниже загрузка ЦПУ и расход памяти (потому что открывается меньше соединений одновременно).
  • Можно использовать HTTP pipelining (конвейерную обработку) запросов и ответов.
  • Снижает вероятность перегрузки сети (меньше TCP соединений).
  • Уменьшает лаги для последующих запросов (не нужно заново устанавливать TCP соединение).
  • Ошибки HTTP возвращаются без закрытия соединения — клиенты могут пробовать новые команды, и, если они не поддерживаются сервером, послать повторный запрос в том же соединении, используя старую семантику.

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

Согласно [tools.ietf.org/html/rfc7230#section-6.4 RFC 7230, разделу 6.4], "клиент должен ограничить количество одновременных соединений к определённому серверу". Предыдущая версия спецификации HTTP/1.1 [tools.ietf.org/html/rfc2616#section-8.1.4 указывала конкретные максимальные значения], но в RFC 7230 "оказалось, что это непрактично для многих приложений... вместо этого... будьте благоразумны, открывая одновременные соединения". Эти рекомендации нацелены на улучшение времени отклика по HTTP и недопущения перегрузок сети. Если конвейерная обработка HTTP реализована правильно, дополнительные соединения не улучшат производительность, но могут привести к перегрузке сети.[7]

Недостатки

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

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

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

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

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

Напишите отзыв о статье "Постоянное HTTP-соединение"

Примечания

  1. [tools.ietf.org/html/rfc7230#section-6.3 Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing, Persistence]
  2. [httpd.apache.org/docs/1.3/mod/core.html#keepalivetimeout Apache HTTP Server 1.3 – KeepAliveTimeout Directive]
  3. [httpd.apache.org/docs/2.0/mod/core.html#keepalivetimeout Apache HTTP Server 2.0 – KeepAliveTimeout Directive]
  4. [httpd.apache.org/docs/2.2/mod/core.html#keepalivetimeout Apache HTTP Server 2.2 — KeepAliveTimeout Directive]
  5. [httpd.apache.org/docs/2.4/mod/core.html#keepalivetimeout Apache HTTP Server 2.4 — KeepAliveTimeout Directive]
  6. Multiple (wiki). [docforge.com/wiki/Httpd/KeepAlive Httpd/KeepAlive]. Docforge. Проверено 30 января 2010. [www.webcitation.org/6BoPDNzeZ Архивировано из первоисточника 31 октября 2012].
  7. Nielssen, Frystyk Henryk; Gettys, James; Baird-Smith, Anselm & Prud’hommeaux, Eric (October 1997), "[conferences.sigcomm.org/sigcomm/1997/papers/p102.html Network Performance Effects of HTTP/1.1, CSS1, and PNG]", Computer Communication Review Т. 27 (4), ISSN [worldcat.org/issn/0146-4833 0146-4833], <conferences.sigcomm.org/sigcomm/1997/papers/p102.html> 
  8. [www.opera.com/press/releases/2000/03/28/ Opera 4.0 Upgrades File Exchange: Includes HTTP 1.1]. Opera Software (28 марта 2000). Проверено 8 июля 2009.
  9. [www.stevesouders.com/blog/2008/03/10/ie8-speeds-things-up/ IE8 speeds things up]. Stevesouders.com (10 марта 2008). Проверено 17 июля 2009.
  10. [support.microsoft.com/kb/813827 How to change the default keep-alive time-out value in Internet Explorer]. Microsoft (27 октября 2007). Проверено 17 июля 2009.
  11. [kb.mozillazine.org/Network.http.keep-alive.timeout Network.http.keep-alive.timeout]. Mozillazine.org. Проверено 17 июля 2009.

Ссылки

  • [tools.ietf.org/html/rfc7230#section-6.3 Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing, Persistence] (англ.)
  • [httpd.apache.org/docs/current/mod/core.html#keepalive Apache HTTPD Keep-Alive Support] (англ.)
  • [conferences.sigcomm.org/sigcomm/1997/papers/p102.html Network Performance Effects of HTTP/1.1, CSS1, and PNG] (англ.)
  • [www.safaribooksonline.com/library/view/http-the-definitive/1565925092/ch04s05.html Persistent Connections] (англ.)

Отрывок, характеризующий Постоянное HTTP-соединение

– Я ни в чем не беру назад своего слова, – сказал он. – И потом, Соня такая прелесть, что какой же дурак станет отказываться от своего счастия?
– Нет, нет, – закричала Наташа. – Мы про это уже с нею говорили. Мы знали, что ты это скажешь. Но это нельзя, потому что, понимаешь, ежели ты так говоришь – считаешь себя связанным словом, то выходит, что она как будто нарочно это сказала. Выходит, что ты всё таки насильно на ней женишься, и выходит совсем не то.
Ростов видел, что всё это было хорошо придумано ими. Соня и вчера поразила его своей красотой. Нынче, увидав ее мельком, она ему показалась еще лучше. Она была прелестная 16 тилетняя девочка, очевидно страстно его любящая (в этом он не сомневался ни на минуту). Отчего же ему было не любить ее теперь, и не жениться даже, думал Ростов, но теперь столько еще других радостей и занятий! «Да, они это прекрасно придумали», подумал он, «надо оставаться свободным».
– Ну и прекрасно, – сказал он, – после поговорим. Ах как я тебе рад! – прибавил он.
– Ну, а что же ты, Борису не изменила? – спросил брат.
– Вот глупости! – смеясь крикнула Наташа. – Ни об нем и ни о ком я не думаю и знать не хочу.
– Вот как! Так ты что же?
– Я? – переспросила Наташа, и счастливая улыбка осветила ее лицо. – Ты видел Duport'a?
– Нет.
– Знаменитого Дюпора, танцовщика не видал? Ну так ты не поймешь. Я вот что такое. – Наташа взяла, округлив руки, свою юбку, как танцуют, отбежала несколько шагов, перевернулась, сделала антраша, побила ножкой об ножку и, став на самые кончики носков, прошла несколько шагов.
– Ведь стою? ведь вот, – говорила она; но не удержалась на цыпочках. – Так вот я что такое! Никогда ни за кого не пойду замуж, а пойду в танцовщицы. Только никому не говори.
Ростов так громко и весело захохотал, что Денисову из своей комнаты стало завидно, и Наташа не могла удержаться, засмеялась с ним вместе. – Нет, ведь хорошо? – всё говорила она.
– Хорошо, за Бориса уже не хочешь выходить замуж?
Наташа вспыхнула. – Я не хочу ни за кого замуж итти. Я ему то же самое скажу, когда увижу.
– Вот как! – сказал Ростов.
– Ну, да, это всё пустяки, – продолжала болтать Наташа. – А что Денисов хороший? – спросила она.
– Хороший.
– Ну и прощай, одевайся. Он страшный, Денисов?
– Отчего страшный? – спросил Nicolas. – Нет. Васька славный.
– Ты его Васькой зовешь – странно. А, что он очень хорош?
– Очень хорош.
– Ну, приходи скорей чай пить. Все вместе.
И Наташа встала на цыпочках и прошлась из комнаты так, как делают танцовщицы, но улыбаясь так, как только улыбаются счастливые 15 летние девочки. Встретившись в гостиной с Соней, Ростов покраснел. Он не знал, как обойтись с ней. Вчера они поцеловались в первую минуту радости свидания, но нынче они чувствовали, что нельзя было этого сделать; он чувствовал, что все, и мать и сестры, смотрели на него вопросительно и от него ожидали, как он поведет себя с нею. Он поцеловал ее руку и назвал ее вы – Соня . Но глаза их, встретившись, сказали друг другу «ты» и нежно поцеловались. Она просила своим взглядом у него прощения за то, что в посольстве Наташи она смела напомнить ему о его обещании и благодарила его за его любовь. Он своим взглядом благодарил ее за предложение свободы и говорил, что так ли, иначе ли, он никогда не перестанет любить ее, потому что нельзя не любить ее.
– Как однако странно, – сказала Вера, выбрав общую минуту молчания, – что Соня с Николенькой теперь встретились на вы и как чужие. – Замечание Веры было справедливо, как и все ее замечания; но как и от большей части ее замечаний всем сделалось неловко, и не только Соня, Николай и Наташа, но и старая графиня, которая боялась этой любви сына к Соне, могущей лишить его блестящей партии, тоже покраснела, как девочка. Денисов, к удивлению Ростова, в новом мундире, напомаженный и надушенный, явился в гостиную таким же щеголем, каким он был в сражениях, и таким любезным с дамами и кавалерами, каким Ростов никак не ожидал его видеть.


Вернувшись в Москву из армии, Николай Ростов был принят домашними как лучший сын, герой и ненаглядный Николушка; родными – как милый, приятный и почтительный молодой человек; знакомыми – как красивый гусарский поручик, ловкий танцор и один из лучших женихов Москвы.
Знакомство у Ростовых была вся Москва; денег в нынешний год у старого графа было достаточно, потому что были перезаложены все имения, и потому Николушка, заведя своего собственного рысака и самые модные рейтузы, особенные, каких ни у кого еще в Москве не было, и сапоги, самые модные, с самыми острыми носками и маленькими серебряными шпорами, проводил время очень весело. Ростов, вернувшись домой, испытал приятное чувство после некоторого промежутка времени примеривания себя к старым условиям жизни. Ему казалось, что он очень возмужал и вырос. Отчаяние за невыдержанный из закона Божьего экзамен, занимание денег у Гаврилы на извозчика, тайные поцелуи с Соней, он про всё это вспоминал, как про ребячество, от которого он неизмеримо был далек теперь. Теперь он – гусарский поручик в серебряном ментике, с солдатским Георгием, готовит своего рысака на бег, вместе с известными охотниками, пожилыми, почтенными. У него знакомая дама на бульваре, к которой он ездит вечером. Он дирижировал мазурку на бале у Архаровых, разговаривал о войне с фельдмаршалом Каменским, бывал в английском клубе, и был на ты с одним сорокалетним полковником, с которым познакомил его Денисов.