Middle
Тафовутҳои протоколҳои HTTP/1 ва HTTP/2 чист?
sobes.tech AI
Ҷавоб аз AI
اصول تفاوتهای اصلی بین HTTP/1.1 و HTTP/2:
-
مالتیپلیکسی:
- HTTP/1.1: پردازش متوالی درخواستها بر روی یک اتصال. برای بارگذاری همزمان، نیاز به چندین اتصال TCP بود.
- HTTP/2: مالتیپلیکسی بر روی یک اتصال TCP. امکان ارسال همزمان چندین درخواست و دریافت پاسخها، بدون مسدود کردن یکدیگر.
-
فشردهسازی هدرها (HPACK):
- HTTP/1.1: هدرها به صورت غیر فشرده منتقل میشدند، که در صورت تعداد زیاد درخواستها، ممکن است زائد باشد.
- HTTP/2: فشردهسازی هدرها با استفاده از الگوریتم HPACK. اندازه دادههای منتقل شده را کاهش میدهد.
-
اولویتبندی جریانها:
- HTTP/1.1: امکان اولویتبندی وجود نداشت.
- HTTP/2: مشتری میتواند اولویتهایی برای جریانهای مختلف داده تعیین کند، که بر ترتیب پردازش آنها در سرور تأثیر میگذارد.
-
پوش سرور (Server Push):
- HTTP/1.1: مشتری باید هر منبع (CSS، JS، تصاویر) را صراحتاً درخواست کند.
- HTTP/2: سرور میتواند منابعی را که فکر میکند برای نمایش صفحه نیاز است، قبل از درخواست مشتری، ارسال کند.
-
پروتکل دودویی:
- HTTP/1.1: پروتکل متنی، نسبتاً آسان برای خواندن.
- HTTP/2: پروتکل دودویی، کارآمدتر برای پارس کردن و انتقال.
جدول مقایسه:
| ویژگیها | HTTP/1.1 | HTTP/2 |
|---|---|---|
| مالتیپلیکسی | ندارد (نیاز به چند TCP) | بله (یک TCP) |
| فشردهسازی هدرها | ندارد | بله (HPACK) |
| اولویتبندی جریانها | ندارد | بله |
| پوش سرور | ندارد | بله |
| فرمت پروتکل | متنی | دودویی |
| مشکل بلوک خط سر (Head-of-Line Blocking) | وجود دارد (برای یک TCP) | کاهش یافته به لطف مالتیپلیکسی |
مثال مالتیپلیکسی (مفهومی):
// HTTP/1.1: درخواستهای متوالی
fetch('/resource1')
.then(() => fetch('/resource2'))
.then(() => fetch('/resource3'));
// HTTP/2: درخواستهای همزمان بر روی یک اتصال
// در مرورگر این به صورت خودکار برای HTTP/2 انجام میشود
// درخواستها تقریباً همزمان ارسال میشوند