HTTP/3 - нова версія протоколу
Що таке HTTP?HTTP (Hypertext Transfer Protocol) – універсальний протокол передачі гіпертексту. Абсолютно всі текстові дані на всіх сайтах мережі передаються через HTTP.
Понад тридцять років тому було випущено версію HTTP/0.9. У ній використовувався лише GET-метод і не було службових заголовків. У травні 1996 року з'явився HTTP/1.0. У цій версії були присутні нові методи, заголовки та кешування.
HTTP/1.1 був представлений вже через три роки в 1999. Протокол доповнили keep-alive і зробили головну та суттєву зміну, яка вплинула на весь розвиток мережі - заголовок Host. Завдяки цьому ми можемо дозволити організовувати віртуальний хостинг, і розміщувати кілька доменів на одному IP.
У лютому 2015 року вийшов новий стандарт протоколу - HTTP/2, який був заснований на протоколі прикладного рівня для передачі веб-контенту SPDY. Протокол HTTP/2 став бінарним, з'явилося стиснення заголовків (HPACK), мультиплексування та пріоритезація ресурсів, а також опція скасування завантаження та Server Push. Завдяки функції мультиплексування з'явилася можливість надсилати кілька файлів за один раз.
З моменту виходу HTTP/2 всі його користувачі очікували істотних змін у швидкості роботи сайтів, але на практиці з'ясувалося, що більшість нововведень протоколу було зроблено не зовсім коректно. Управління потоками та пріоритетами, і технологія Server Push для відправки клієнту ресурсів насправді виявилися не такими ефективними та продуктивними, як це хотіли розробники.
Яка різниця між HTTP/3 та попередніми протоколами HTTP/1.1 та HTTP/2?Розробка протоколу HTTP/2 велася з метою максимального прискорення завантаження веб-ресурсів, насамперед пов'язаних із візуальним планом сайту. Протокол HTTP/3 суттєво просунувся далі у цьому напрямі – він встановлює з'єднання між сервером та клієнтом ще швидше за рахунок протоколу QUIC. Суть останнього полягає у поєднаних в одне транспортного та криптографічного «рукостисканнях».
У результаті ми заощаджуємо цикл прийому-передачі за рахунок чого швидше встановлюється з'єднання та швидкість завантаження елементів сайту підвищується.
Відмінність HTTP/3 та попередніх HTTP/1.1 та HTTP/2-версій?Протоколи HTTP/1.1 та HTTP/2 використовують TCP-з'єднання, HTTP/3 ж, у свою чергу, працює за допомогою протоколу QUIC, що використовує UDP-з'єднання.
Яка саме відмінність між ними?TCP вимагає підтвердження доставки, саме відповіді від клієнта, якому доставляється пакет даних. З цією метою необхідно заздалегідь встановити з'єднання.
Для роботи UDP попереднє з'єднання не потрібне і пакети з даними доставляються в рази швидше.
Останнім часом TCP протокол практично не змінювався. Ми маємо значний приріст швидкості передачі даних фізично, проте стабільність з'єднання цей час не додалася. У пошуках альтернативи розробники припинили свою увагу на UDP. Для того, щоб гарантувати та оптимізувати доставку пакетів, у TCP використовується маса параметрів, у той час як у UDP задіяні лише порти отримання та призначення, довжина даних та контрольна сума. Також UDP не вимагає “рукостискання” для встановлення з'єднання і в ньому відсутній ефект head-of-line, про який йтиметься нижче. Тобто це легший та швидший протокол у порівнянні з TCP.
МультиплексуванняПри використанні HTTP/1.1 для кожного елемента сайту потрібне окреме з'єднання. Метод мультиплексування в HTTP/2 дозволяє завантажувати всі елементи сайту за допомогою лише одного з'єднання TCP між браузером та сервером.
HTTP/3 ще для більшої швидкості завантаження сайту також використовує метод мультиплексування використовуючи протокол UDP. Він відправляє кілька потоків даних одночасно для компенсації потоків, які були втрачені на шляху до клієнта.
ЗаголовкиУ HTTP/2, у порівнянні з HTTP/1.1, заголовки елементів сторінки надсилаються стислими. Це потрібно, щоб мережевий канал вміщував допоміжну інформацію під час передачі.
У HTTP/3 для ще більшої оптимізації, QUIC використовує спрощені заголовки та спеціалізовані невеликі пакети, щоб надсилати додаткову інформацію.
Підвищена безпека для користувачів
У HTTP/3 відмовилися від визначення відкритого тексту і вбудовують протокол захисту TLS у QUIC і завдяки цьому дані завжди наскрізь зашифровані. Перехоплення даних у цьому випадку утруднений і практично не залишається жодних шансів для цього.
Вбудоване шифрування ще й прискорює роботу HTTP/3. У звичайному HTTPS тристороннє рукостискання TCP має завершитися на транспортному рівні, і відбутися до того часу, поки між клієнтом та сервером вирушать реальні дані. QUIC об'єднує ці два рукостискання таким чином, що вони відбуваються одночасно. Клієнт та сервер підтверджують, що з'єднання відкрите, і одночасно генерують ключі шифрування TLS.
ПріоритетністьЗначний приріст швидкості завантаження сайту для користувачів досягається за рахунок пріоритетності завантаження контенту. Окремий потік існує зі своїм пріоритетом, тому, у випадку з довгою сторінкою, спочатку завантажуватиметься верхній її фрагмент.
Втрата пакетівОдна із сучасних проблем — втрата пакетів Packet Loss. Бездротові технології 3G, 4G, LTE – частіше використовуються на вулиці, де є перевідображення сигналу, що призводить до регулярної втрати пакетів. Крім того, немає жодних гарантій, що пакети, надіслані в певному порядку, так і прийдуть — вони можуть змінюватись місцями на етапі отримання.
Ще одна проблема передачі даних у бездротових мережах – випадкова затримка між пакетами. Через ці затримки страждає якість зв'язку, і, можлива ситуація, коли клієнт достеменно не знає, чи отримано пакет і що дані запитуються заново.
Все це породжує таке неприємне явище, як блокування початку черги — head-of-line.
Наприклад, ми надсилаємо в TCP-канал якісь дані, і якщо один пакет загубився, на виході ми нічого не отримуємо. У цьому випадку TCP або перезапитує пакет, або проходить якийсь час і дані надсилаються знову. Однак, доки дані не будуть повторно отримані, ми не можемо отримати доступ до файлів, які вже знаходяться в буфері на нашому комп'ютері.
Проблема head-of-line вирішується у QUIC наступним чином. На відміну від протоколу TCP, де передача файлів йде одним потоком, у QUIC застосовуються окремі потоки. Втрата окремого пакета TCP призводить до того, що весь потік виявляється марним і відкидається. У QUIC ж, якщо якийсь окремий пакет пропаде, на виході ми все одно отримаємо кілька успішних потоків, з якими можна працювати (і один неповний потік, який можна запросити повторно окремо).
Ефективність HTTP/3HTTP/3 помітно швидше та дозволяє використовувати всю ширину каналу зв'язку. В оновленому протоколі менше службової інформації та, відповідно, з'єднання працює швидше. Це добре помітно під час передачі великої кількості дрібних файлів. Як приклад: Twitch, Youtube. З'єднання стабільніше і не обривається. Завантаження файлів через Wifi та мобільну мережу продовжуватиметься при перепідключенні.
Недоліки також є і полягають у тому, що вся реалізація протоколу виконана не лише на рівні ядра, «залізниць» і мережі, але в рівні User Space. Схильний до уразливостей UDP-протоколу до DDOS-атак і різних флуд-атак.
Всі ці перелічені методи дозволяють суттєво економити мережеві та серверні ресурси, а також виключати затримки, необхідні для встановлення з'єднань при роботі з сайтами.