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-ը նման մեխանիզմ չունի:
- Սերվերի մղում (Server Push): HTTP/2-ը թույլ է տալիս սերվերին ուղարկել ռեսուրսներ հաճախորդին առանց այն պահանջելու, հիմնվելով ենթադրության՝ դրանք անհրաժեշտ են էջի ցուցադրման համար։ HTTP/1.1-ում հաճախորդը պետք է հստակ պահանջի յուրաքանչյուր ռեսուրսը:
- Ֆրեյմերի ձևաչափ (Binary Framing): HTTP/2-ը տվյալները փոխանցում է բինարային ձևաչափով (ֆրեյմեր), ինչը հեշտացնում է վերլուծությունը և բարձրացնում է արդյունավետությունը՝ համեմատած HTTP/1.1-ի տեքստային ձևաչափի:
Տեղեկատվության համեմատական աղյուսակ՝
| Գծանշան | HTTP/1.1 | HTTP/2 |
|---|---|---|
| Կապ | Մի կապ՝ յուրաքանչյուր հարցման համար (առանց pipelining) |
Մի կապ՝ մի քանի հոսքերի համար |
| Մուլտիպլեքսավորում | Չկա (կամ սահմանափակ pipelining) |
Այո |
| Հետագրերի սեղմում | Չկա | HPACK (բինարային սեղմում) |
| Հոսքերի առաջնահերթություն | Չկա | Այո |
| Սերվերի մղում | Չկա | Այո |
| Տվյալների ձևաչափ | Տեքստ | Բինարային (ֆրեյմեր) |
| 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 ֆրեյմերով: