HTTP: відмінності між версіями

[неперевірена версія][перевірена версія]
Вилучено вміст Додано вміст
(m)
Рядок 68:
Content-Length: 1234
(далі йде текст запитаної сторінки)
 
== HTTP/2 ==
У лютому 2015 комітет [[IETF]] ([[Internet Engineering Task Force]]), що займається розвитком протоколів і архітектури Інтернет, надав специфікації HTTP/2.0 статус "пропозиції стандарту"<ref>[http://www.ietf.org/mail-archive/web/ietf-announce/current/msg13795.html Protocol Action: 'Hypertext Transfer Protocol version 2' to Proposed Standard (draft-ietf-httpbis-http2-17.txt)]</ref>, а також приступив до формування окремих RFC для протоколу HTTP/2.0 і формату стиснення заголовків HPACK.
 
Основним завданням створення HTTP/2.0 є підвищення ефективності використання мережевих ресурсів і зниження затримок при з'єднанні і обміні даними між клієнтом і сервером в умовах сучасних реалій, при яких для завантаження сайту потрібно відправити безліч окремих запитів (у середньому близько 100), пов'язаних з отриманням [[CSS]], файлів [[JavaScript]] і картинок. Протокол HTTP/1.1, в силу блокувань при конвеєрній передачі даних і високих накладних витрат на віддачу ресурсів невеликого розміру, не може забезпечити належну ефективність і змушує встановлювати кілька одночасних [[TCP]]-з'єднань до сервера. В основу HTTP/2.0 покладений протокол [[SPDY]], розроблений компанією [[Google]] — він дозволяє прискорити завантаження сайтів на 15-50%.
 
Основні особливості ([https://github.com/vlet/http2-explained/blob/master/http2.ru.pdf?raw=true PDF]) HTTP/2.0:
* Застосування бінарного протоколу, що оперує передачею бінарних кадрів. Кожен кадр має заголовок з інформацією про тип, розмір, опції та ідентифікаторі потоку. Кадри з типом DATA використовуються для передачі даних, HEADERS — HTTP-заголовків, RST_STREAM — для дострокового переривання відправлення даних;
* Мультиплексування і розпаралелювання потоків в рамках одного TCP-з'єднання. Пакети різних потоків змішуються і, на відміну від конвеєрної передачі HTTP/1.1, не очікують закінчення відправлення запиту. Підтримка ефективної двобічної передачі даних. Можливість мультиплексування при зверненні до різних хостів, що дозволяє додатково прискорити одночасне завантаження веб-контенту з різних сайтів (у SPDY мультиплексування підтримується тільки для одного хоста);
* Можливість установки пріоритетів і залежностей для потоків, що дозволяє виділити найважливіші потоки, які потрібно виконати в першу чергу, а також визначити залежність одного потоку від іншого;
* Стиснення HTTP-заголовків. У тому числі підтримується усунення дублікатів заголовків і Cookie, повторюваних для серії запитів до одного сайту. Допускається визначення окремих заголовків що не підлягають стисненню;
* Низька чутливість до затримок;
* Засоби для узгодження протоколу між клієнтом і сервером, що дозволяють вибрати HTTP/1.1, HTTP/2.0 і інші протоколи: сервер надає список підтримуваних протоколів, які може вибрати клієнт. Для шифрованих з'єднань параметри TLS узгоджуються за допомогою протоколу [[APLN]], при якому клієнт повідомляє список підтримуваних опцій, а сервер вибирає найоптимальніший для себе варіант;
* Забезпечення високого рівня сумісності з HTTP/1.1: збережені заголовки, схема [[URI]], коди стану і методи (GET, POST тощо). Забезпечена можливість створення проксі для доступу клієнтів HTTP/1.1 до серверів HTTP/2.0;
* Можливість установки шифрованих ([[HTTPS]]) і не шифрованих з'єднань (HTTP). Шифрування здійснюється з використанням TLS 1.2 або новішої версії. Незважаючи на те, що специфікація допускає створення нешифрованих сполучень, розробники [[Firefox]] і [[Chrome]] мають намір забезпечити роботу HTTP/2.0 тільки поверх TLS;
* Підтримка технології Server push для передачі даних від сервера до клієнта (наприклад, коли сервер вважає, що після певного запиту обов'язково будуть затребувані інші дані, він може відправити ці дані не чекаючи фактичного запиту);
* Підтримка HTTP/2.0 на час пропозиції стандарту вже реалізована в браузерах [[Firefox]] 36+, Chrome (потрібна побудова з "--enable-spdy4") і IE 11. Серверні реалізації поки обмежуються [[OpenLiteSpeed]]​, H2O , nghttp2 і деякими бібліотеками на високорівневих мовах.
 
== Посилання ==