Sobes.tech
Junior

Ispričajte o verzijama HTTP i njihovim razlikama.

sobes.tech АИ

Одговор од АИ

Основне верзије HTTP:

  • HTTP/0.9: Базна верзија за пренос једноставних HTML докумената. Подржавала је само метод GET, без заглавља и статусних одговора.
  • HTTP/1.0: Уведена подршка за заглавља (Content-Type, User-Agent), методе POST и HEAD, као и статусе одговора. Веза се затварала након сваког захтева/одговора.
  • HTTP/1.1: Значајна унапређења:
    • Постојане везе (Persistent Connections) - поновна употреба TCP везе за више захтева.
    • Пипејплајнинг - слање више захтева без чекања одговора (иако лоше реализовано и ретко коришћено).
    • Виртуелни хостови (Host header).
    • Делимични GET захтеви (Range header).
    • кеширање (Cache-Control, ETag, Last-Modified).
    • Методи PUT и DELETE.
  • HTTP/2: Заснован на SPDY протоколу од Гугла. Основне разлике:
    • Бинарни протокол - ефикасније парсирање.
    • Мултиплексирање - паралелна пренос више захтева/одговора на једној TCP вези. Уклања проблем "head-of-line blocking" HTTP/1.1 pipelining-а.
    • Сжимање заглавља (HPACK) - смањење величине преносивих података.
    • Приоритизација (Server Push) - сервер може послати ресурсе који ће вероватно бити потребни клијенту пре него што их затражи.
  • HTTP/3: Заснован на UDP протоколу (са коришћењем QUIC - Quick UDP Internet Connections) уместо TCP. Циљано на побољшање перформанси, посебно у нестабилним мрежама:
    • Уклања "head-of-line blocking" на нивоу везе TCP. Ако се изгуби пакет у TCP, сви следећи пакети се блокирају до поновног слања. У QUIC (и HTTP/3) блокира само ток који припада изгубљеном пакету.
    • Брже успостављање везе (0-RTT или 1-RTT).
    • QUIC укључује своје механизме контроле тока и поузданости.

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

Карактеристика HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3
Протокол TCP TCP TCP UDP (QUIC)
Формат Текстуални Текстуални Бинарни Бинарни
Основна веза Краткотрајна Постојана Постојана (мултиплексирање) Постојана (QUIC стримови)
Мултиплексирање Не Описано (Pipelining) Да Да
Компресија заглавља Не Не HPACK QPACK (у QUIC-у)
Server Push Не Не Да Да
HOL блокирање (TCP) Да (на нивоу захтева) Да (на нивоу захтева) Да (на нивоу везе) Не (на нивоу тока)

Пример захтева у HTTP/1.1:

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

Пример захтева у HTTP/2 (концептуално, у бинарном формату):

// Захтев 1: Добити /index.html
// :method = GET
// :path = /index.html
// :authority = www.example.com

// Захтев 2: Добити /style.css
// :method = GET
// :path = /style.css
// :authority = www.example.com
// ...паралелно преко једне везе