Sobes.tech
Middle

Каква е разликата между HTTP/1 и HTTP/2?

sobes.tech AI

Отговор от AI

Основни разлики:

  • Мултиплексиране (Multiplexing). HTTP/2 позволява изпращането и получаването на няколко заявки и отговора едновременно през една TCP връзка. HTTP/1.1 изискваше отделна връзка за всяка заявка/отговор (с изключение на механизма pipelining, който имаше ограничения).
  • Заглавия (Header Compression). HTTP/2 използва компресия на заглавията с помощта на алгоритъма HPACK, за да намали техния размер и количеството данни, които се предават. В HTTP/1.1 заглавията се изпращат в текстов формат.
  • Приоритизация на потоците (Stream Prioritization). В HTTP/2 клиентът може да задава приоритет за различните потоци (заявки/отговори), което позволява на сървъра да оптимизира реда на доставяне на данните. HTTP/1.1 няма такъв механизъм.
  • Сървърно Push (Server Push). HTTP/2 позволява на сървъра да изпраща ресурси към клиента преди той да ги поиска, базирайки се на предположението за тяхната необходимост за показването на страницата. В HTTP/1.1 клиентът трябва ясно да поиска всеки ресурс.
  • Формат на рамките (Binary Framing). HTTP/2 предава данните в бинарен формат (рамки), което улеснява парсирането и увеличава ефективността в сравнение с текстовия формат на HTTP/1.1.

Сравнение в таблица:

Признак HTTP/1.1 HTTP/2
Свързване Едно свързване за всеки заявка (без pipelining) Едно свързване за няколко потока
Мултиплексиране Няма (или ограничено pipelining) Да
Компресия на заглавия Няма HPACK (бинарна компресия)
Приоритизация на потоци Няма Да
Сървърно Push Няма Да
Формат на данните Текст Бинарен (рамки)
Head-of-Line блокиране Съществува Частично решава се чрез мултиплексиране

Пример за заявка в HTTP/1.1:

// GET /index.html HTTP/1.1
// Host: example.com
// User-Agent: curl/7.68.0
// Accept: */*

Пример за частично представяне на данни в HTTP/2 (обменът на рамки е по-сложен и не се показва така просто):

// В HTTP/2 взаимодействието се осъществява на ниво рамки (HEADERS, DATA и др.),
// които са бинарни и скрити за потребителя на ниво приложение.
// Представянето им в прост текст е трудно.
// Заглавията се компресират и се предават в HEADERS рамка.
// Тялото на отговора се предава в DATA рамки.