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
// ...паралелно преко једне везе