Jump to content

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

(Перенаправлено из постоянных HTTP-соединений )

HTTP Постоянное соединение , также называемое поддержанием активности HTTP или повторным использованием соединения HTTP , представляет собой идею использования одного TCP- соединения для отправки и получения нескольких HTTP-запросов /ответов, а не открытия нового соединения для каждой отдельной пары запрос/ответ. Новый протокол HTTP/2 использует ту же идею и развивает ее, позволяя мультиплексировать несколько одновременных запросов/ответов по одному соединению.

Операция

[ редактировать ]

В HTTP 1.0 соединения всегда должны закрываться сервером после отправки ответа. [ 1 ]

По крайней мере, с конца 1995 г. [ 2 ] разработчики популярных продуктов (браузеров, веб-серверов и т. д.), использующих HTTP/1.0, начали добавлять неофициальное расширение (к протоколу) под названием «keep-alive», чтобы разрешить повторное использование соединения для нескольких запросов/ответов. [ 3 ] [ 4 ]

Если клиент поддерживает поддержку активности, он добавляет к запросу дополнительный заголовок:

Connection: keep-alive

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

Это будет продолжаться до тех пор, пока клиент или сервер не решат, что разговор окончен, и в этом случае они опускают "Connection:" заголовок из последнего отправленного сообщения или, лучше, к нему добавляют ключевое слово «закрыть»:

Connection: close

После этого соединение закрывается по заданным правилам.

С 1997 года различные версии спецификаций HTTP/1.1 признавали использование этого неофициального расширения и включали несколько предостережений относительно совместимости между клиентами/серверами HTTP/1.0 (поддержание активности) и HTTP/1.1. [ 5 ]

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

Keepalive затрудняет клиенту определение того, где заканчивается один ответ и начинается следующий ответ, особенно во время конвейерной операции HTTP. [ 11 ] Это серьезная проблема, когда Content-Length невозможно использовать из-за потоковой передачи. [ 12 ] Чтобы решить эту проблему, в HTTP 1.1 было введено фрагментированное кодирование передачи , определяющее last-chunk кусочек. [ 13 ] last-chunk бит устанавливается в конце каждого ответа, чтобы клиент знал, где начинается следующий ответ.

Преимущества

[ редактировать ]

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

Недостатки

[ редактировать ]

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

Также может возникнуть состояние гонки , когда клиент отправляет запрос на сервер в то же время, когда сервер закрывает TCP-соединение. [ 15 ] Сервер должен отправить клиенту код состояния 408 Request Timeout непосредственно перед закрытием соединения. Когда клиент получает код состояния 408, после отправки запроса он может открыть новое соединение с сервером и повторно отправить запрос. [ 16 ] Не все клиенты повторно отправят запрос, а многие из них сделают это только в том случае, если запрос имеет идемпотентный метод HTTP .

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

[ редактировать ]
Схема множественного и постоянного соединения.

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

По умолчанию Internet Explorer версий 6 и 7 использует два постоянных соединения, а версия 8 — шесть. [ 18 ] Время ожидания постоянных подключений истекает через 60 секунд бездействия, которое можно изменить через реестр Windows. [ 19 ]

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

Выполнение

[ редактировать ]

Python requests библиотека содержит requests.Session(), который устанавливает постоянное HTTP-соединение, тем самым позволяя повторно использовать базовое TCP-соединение, что может привести к значительному увеличению производительности. [ 21 ]

См. также

[ редактировать ]
  • Конвейерная обработка HTTP , благодаря которой можно отправлять несколько запросов, не дожидаясь ответа.
  • HTTP/2 , который обеспечивает конвейерную обработку запросов и ответов вне очереди, а также прогнозирующую отправку контента до того, как он будет запрошен.
  1. ^ Протокол передачи гипертекста (HTTP/1.0): общая работа
  2. ^ Гилдор, Дэн. "HTTP_Соединение?" . Группы Google . Проверено 17 ноября 2023 г.
  3. ^ «Руководство по TCP/IP — Установление, управление и завершение постоянного соединения HTTP» . www.tcpipguide.com . Архивировано из оригинала 21 мая 2017 г. Проверено 31 декабря 2017 г.
  4. ^ Дэвид Горли; Брайан Тотти; Марджори Сэйер; Аншу Аггарвал; Сайлу Редди (2002). HTTP: Полное руководство. (отрывок из главы: «Постоянные соединения») . О'Рейли Медиа, Inc. ISBN  9781565925090 . Проверено 18 октября 2021 г.
  5. ^ Jump up to: а б Протокол передачи гипертекста (HTTP/1.1): синтаксис и маршрутизация сообщений, постоянство
  6. ^ «HTTP-сервер Apache 1.3 — директива KeepAliveTimeout» . Архивировано из оригинала 26 октября 2015 г. Проверено 28 января 2015 г.
  7. ^ Apache HTTP Server 2.0 – Директива KeepAliveTimeout
  8. ^ Apache HTTP Server 2.2 – Директива KeepAliveTimeout
  9. ^ Apache HTTP Server 2.4 – Директива KeepAliveTimeout
  10. ^ Несколько (вики). «Httpd/KeepAlive» . Докфорж . Архивировано из оригинала 6 января 2010 года . Проверено 30 января 2010 г.
  11. ^ «HTTP: Какова связь между конвейерной обработкой, сохранением активности и событиями, отправленными сервером» .
  12. ^ «Потоковая передача HTTP (или фрагментация или сохранение и пересылка)» .
  13. ^ «Частное кодирование передачи» . Июнь 1999 года.
  14. ^ Нильссен, Фристик Хенрик; Геттис, Джеймс; Бэрд-Смит, Ансельм; Прюдоммо, Эрик; Виум Ли, Хокон; Лилли, Крис (октябрь 1997 г.), «Влияние HTTP/1.1, CSS1 и PNG на производительность сети» , Обзор компьютерных коммуникаций ACM SIGCOMM , 27 (4), ISSN   0146-4833
  15. ^ «Как браузеры обрабатывают состояние гонки поддержки активности HTTP?» . Переполнение стека . 6 марта 2017 г.
  16. ^ Филдинг, Рой Т.; Решке, Джулиан (июнь 2014 г.). Филдинг, Р.; Решке, Дж. (ред.). «Протокол передачи гипертекста (HTTP/1.1): семантика и контент» . Трекер данных IETF . дои : 10.17487/RFC7231 . S2CID   14399078 .
  17. ^ «Обновление файлового обмена Opera 4.0: включает HTTP 1.1» . Программное обеспечение Опера. 28 марта 2000 г. Проверено 8 июля 2009 г.
  18. ^ «IE8 ускоряет работу» . Stevesouders.com. 10 марта 2008 г. Проверено 17 июля 2009 г.
  19. ^ «Как изменить значение времени ожидания активности по умолчанию в Internet Explorer» . Майкрософт. 27 октября 2007 г. Проверено 17 июля 2009 г.
  20. ^ «Network.http.keep-alive.timeout» . Mozillazine.org . Проверено 17 июля 2009 г.
  21. ^ «Запросы.AdvancedUsage.SessionObjects» . ©MMXVIX. Проект Кеннета Рейца . Проверено 22 апреля 2023 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: ded80f83d43912d62265a605777582a9__1720128180
URL1:https://arc.ask3.ru/arc/aa/de/a9/ded80f83d43912d62265a605777582a9.html
Заголовок, (Title) документа по адресу, URL1:
HTTP persistent connection - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)