Sobes.tech
Middle

HTTP/1 və HTTP/2 arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Əsas fərqlər:

  • Çoxlama (Multiplexing). HTTP/2, eyni TCP bağlantısı vasitəsilə bir vaxtda bir neçə sorğu və cavabı göndərməyə və almaya imkan verir. HTTP/1.1 hər sorğu/cavab üçün ayrıca bağlantı tələb edirdi (yalnız pipelining mexanizmi istifadə olunduqda, lakin məhdudiyyətlərlə).
  • Başlıqların sıxılması. HTTP/2, HPACK algoritmi ilə başlıqları sıxışdıraraq onların ölçüsünü və ötürülən məlumatların miqdarını azaldır. HTTP/1.1-də başlıqlar mətn formatında göndərilir.
  • Axın Prioritetləşdirilməsi. HTTP/2-də müştəri müxtəlif axınlar üçün (sorğular/cavablar) prioritet göstərə bilər, bu da serverə məlumatların çatdırılma ardıcıllığını optimallaşdırmağa imkan verir. HTTP/1.1 belə mexanizmi yoxdur.
  • Serverin əvvəlcədən göndərməsi (Server Push). HTTP/2 serverə, müştəri onları soruşmadan əvvəl resursları göndərməyə imkan verir, bu da onların səhifənin göstərilməsi üçün lazım olduğunu fərz edir. HTTP/1.1-də, müştəri hər resursu açıq şəkildə sorğulamalıdır.
  • Çərçivə formatı. HTTP/2 məlumatları ikili formatda (çərçivələr) ötürür, bu da analiz etməyi asanlaşdırır və HTTP/1.1-in mətn formatına nisbətən səmərəliliyi artırır.

Cədvəldə müqayisə:

Xüsusiyyət HTTP/1.1 HTTP/2
Bağlantı Hər sorğu üçün ayrı bağlantı (pipelining olmadan) Bir neçə axın üçün tək bağlantı
Çoxlama Yox (və ya pipelining ilə məhdudlaşdırılmış) Bəli
Başlıqların sıxılması Yox HPACK (ikili sıxışdırma)
Axın prioritetləşdirilməsi Yox Bəli
Serverin əvvəlcədən göndərməsi Yox Bəli
Məlumatların formatı Mətn İkili (çərçivələr)
Head-of-Line Bloklaması Mövcuddur Kısmen çoxlama ilə həll olunur

HTTP/1.1-də sorğu nümunəsi:

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

HTTP/2-də məlumatların qismən nümayişi (çərçivə mübadiləsi daha mürəkkəbdir və burada sadə şəkildə göstərilmir):

// HTTP/2-də qarşılıqlı əlaqə çərçivələr səviyyəsində həyata keçirilir (HEADERS, DATA və s.),
// bunlar ikili və tətbiq səviyyəsində istifadəçidən gizlidir.
// Sadə mətn şəklində onları göstərmək çətindir, yalnız illustrasiya üçün.
// Başlıqlar sıxılır və HEADERS çərçivəsində ötürülür.
// Cavabın gövdəsi DATA çərçivələrində ötürülür.