kzhereb / knu-is-rivim2017

Discussing lectures, questions and other related topics for RiVIM course
0 stars 1 forks source link

Question 6.6. HTTP/2 vs. HTTP/1.1 #54

Open fly-appa-fly opened 6 years ago

fly-appa-fly commented 6 years ago

Навести нові можливості протоколу HTTP/2 чи важливі відмінності від HTTP/1.1 (крім вже згаданих на слайді 35).

Бажано не лише наводити якісь списки можливостей, а й наводити пояснення – чим саме кожна можливість може бути корисною розробникам чи користувачам веб-застосунків.

viktor-yakubiv commented 6 years ago

Трохи з історії

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

Та з часом з'єднання стали значно швидшими. А омеження залишилося. Треба було щось з цим робити.

І люди придумли хак: зберігати стилі, зображення, скрипти на різних доменах. Таким чином одночасно можна було відкрити не 5, а 10, 15 з'єднань; підвантажити усе значно швидше.

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

Люди придумали ще один хак: об'єднувати стилі та скрипти в один файл й пересилати все пакетом, робити спрайти з зображень й таким чином теж мінімізувати кількість запитів.

Реалії сьогодення

Даних стало значно більше. Специфіка стала іншою. Постійно є потреба оновлювати дані через API.

Підхід зі спрайтами та мінімізацією створює ряд проблем з підтримкою, швидкістю й зручністю розробки.

HTTP/2 дає нам можливіть менше перейматися цими аспектами, видалити костилі й не втратити продуктивність. Тобто, якщо в HTTP/1 ми могли нормально переслати 6 картинок, то з HTTP/2 ми можемо за такий же час переслати 60 за рахунок.

Що ще нового в HTTP/2

Насправді, згідно зі специфікацією, HTTP/2 не підтримує незашифровані з'єднання. Але це неточно. Різні розробники можуть по різному трактувати специфікацію. В зв'язку з цим в декого є підтримка незашифрованих з'єднань, а в декого ні.

HTTP/2 має чітко сформовану специфікацію фреймів, подібно до TCP та інших протоколів.

Протокол може бути реалізований без попередніх версій, та в більшості випадків вимазає зворотної сумісності з HTTP/1.1 й реалізацію цієї версії теж.