اما پرسش مهمی هم چنان بی پاسخ مانده است ، چرا انسان نعمت زیبا و خدادادی آزادی را همواره آن را ستایش و تحسین می کند با قیمت بسیار نازلی آن را در معرض فروش گذاشته است
فرق بین 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/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 هست . کتابخونه ها و فریمورک های و سیستم عامل های زیر ازش ساپورت میکنن :
- Windosws 11 or windows-Server 2022
- C# . NET 6
- Python – http3 and aioquic
- Rust – quiche, neqo, and quinn
- C – nghttp3 and lsquic
- Go – quicgo
- JavaScript – Node.js
مطلبی دیگر در همین موضوع
تغییر پوشه نصب وردپرس مثل آب خوردن!
مطلبی دیگر در همین موضوع
تبدیل تاریخ میلادی به شمسی در Swift 4
بر اساس علایق شما
معرفی کتاب "جایی دیگر" نوشته ی گلی ترقی