Постійне HTTP-з’єднання

Постійне HTTP-з'єднання(англ. HTTP persistent connection ), також званіHTTP keep-aliveабоповторне використання з'єднань HTTP(англ. HTTP connection reuse ) - використання одного TCP-з'єднання для надсилання та отримання багаторазових HTTP-запитів та відповідей замість відкриття нового з'єднання для кожної пари запит-відповідь. Новий протокол HTTP/2 розширює цю ідею, дозволяючи одноразові багаторазові запити/відповіді в одному з'єднанні.

Зміст

При роботі за протоколомHTTP 1.0з подібним типом з'єднань немає офіційної специфікації. По суті це доповнення до існуючого протоколу. Якщо браузер підтримує постійні з'єднання, він надсилає додатковий заголовок у запиті:

Потім, коли сервер отримує такий запит і генерує відповідь, він також додає до заголовка відповіді

Після цього з'єднання не розривається, а залишається відкритим. Коли клієнт надсилає ще один запит, він використовує це саме з'єднання. Так буде продовжуватися доти, доки клієнт або сервер не вирішать, що обмін закінчено, і одна із сторін завершить з'єднання.

При роботі по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 з'єднань, тому що створення захищеного з'єднання вимагає більше процесорного часу та мережного обміну між клієнтом та сервером.

Згідно з RFC 7230, розділ 6.4, «клієнт повинен обмежити кількість одночасних з'єднань до певного сервера». Попередня версія специфікації HTTP/1.1 вказувала конкретні максимальні значення, але в 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]