فرق بین http/1 , http/2, http/3

مدت کوتاهی است که http/3 توسط IETF معرفی شده شاید بپرسید http/2 چی بود که حالا ورژن سومش اومده ! :)

خب اگه از grpc تو پروژه هاتون استفاده کردید باید بگم که بصورت پیش فرض از http/2 استفاده کردید .

اصلا مشکل http/1 چی بود که نسخه دومش معرفی شد ؟ مشکل توی Lost شدن packet ها بود که تحت عنوان Head-of-line-blocking شناخته میشه ، در نسخه اول http که هنوز هم به طور گسترده در جهان وب استفاده میشه ، هر ریکوئست (مثلا درخواست واکشی فایل css یا یا فراخوانی یک EndPoint) بصورت chunk به وب سرور ارسال میشه و منتظر پاسخ میمونه ، این رفت و برگشت packet رو بهش میگن Round-trip . وقتی که تمام Packet ها به درستی دریافت شدن ، وب سرور این ها رو پردازش میکنه و متوجه محتوای ریکوئست میشه حالا اگر در این بین یک packet تو اقیانوس گم بشه یا در اثر رعد و برق از بین بره وب سرور منتظر اون یک packet لاست شده میمونه که این رو بهش میگن Head-of-line-blocking.

توی http/2 دیتا این بار بصورت Chunk شده ارسال نمیشه ، یک تکنیکی به کار میبره به اسم Multiplexing هدرها رو و دیتا رو فشرده و سریالایز میکنه و کل ریکوئست رو بصورت دو تا frame کاملا مستقل ارسال میکنه : Header-Frame و Data-frame که چون کپسوله هستند مشکل لاست شدن پکت ها رو نداریم ، کل فرایند ریکوئست و ریسپانس در یک Stream رخ میده .این جوری میشه که سربار سرور کم میشه و سرعت اپلیکیشن ما مث موشک میشه ! واین دلیلی هست که میشه با grpc اپلکیشن Real-time (مثلا چت دو طرفه) نوشت . عکس زیر شاید منظور حرفای بالا رو بهتر برسونه :


تفاوت  http/1   و  http/2
تفاوت http/1 و http/2


اما هرکسی برای خودش برنامه دارد، تا وقتی که اولین مشت می‌خورد توی فکش! بازیکن واقعی، از آن لحظه به بعد مشخص می‌شود! (مایک تامسون - مشت زن آمریکایی) مایک تامسون میگوید وقتی اولین مشت به فک مان خورد، به‌سرعت به فکر کوچک‌سازی یا رهاسازی اهداف و آرزوهایمان می‌افتیم.

مشکل http/2 این هست که با افزایش ازدحام شبکه اگر این بین یک stream لاست بشه کل ریکوئست هم برای سرور قابل شناسایی نیست ! بر خلاف ورژن قبل تر که منتظر میموند تا packet لاست شده ، دریافت شود.

در http/1 , http/2 از پروتکل tcp استفاده میشه اما در http/3 از udp استفاده میشه خب تفاوت این دو در چیه :


یه زمانی که دوره نتورک پلاس رو میدیدم استاد یه چیزی گفت دیگه فرق این دو رو تا ته متوجه شدم : Tcp مثل تلفن میمونه ، و Udp مثل رادیو و تلویزیون : یعنی چی ؟ وقتی که با تلفن تماس بگیری باید حتما و الزاما یه نفر باشه اونور خط که جوابت رو بده، ولی در رادیو یا تلویزیون ، فرستنده کاری به گیرنده نداره و پیامش رو ارسال میکنه هر کس روشن بود میگیره .

به زبان فنی تر : Udp پیام رو BroadCast میکنه اما Tcp از روش Peer-to-Peer استفاده میکنه (داریم در مورد لایه های شبکه صحبت میکنیم ) ، خب روی همین اصل کلی دیگه از تفاوت هاشون هم قابل تشخیص میشه مثلا سرعت Udp خیلی از tcp بیشتر هست (به دلیل اینکه برای دریافت پاسخ صبر نمیکنه) و خیلی موارد دیگه که از حوصله این بحث خارج میشه . یه نکته مهم اینه که http/3 امکان فرخوانی از لوکال و LoopbackAddress رو نداره
htpp/2 تو سال 2018 معرفی شد . http/3 تازه معرفی شده و Preview هست . کتابخونه ها و فریمورک های و سیستم عامل های زیر ازش ساپورت میکنن :