Sobes.tech
Middle

Koja je razlika između HTTP/1 i HTTP/2?

sobes.tech АИ

Одговор од АИ

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

  • Мултиплексирање (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 фрејмовима.