<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>پست‌های انتشارات برنامه نویسی یه مقدار عمیق تر</title><link>https://virgool.ir/Programming-in-deep/feed</link><description>برنامه نویسی یه مقدار عمیق تر</description><language>fa</language><pubDate>2026-11-11 05:01:19</pubDate><image><url></url><title>برنامه نویسی یه مقدار عمیق تر</title><link>https://virgool.ir/Programming-in-deep</link></image><item><title>فرق بین  http/1 , http/2, http/3</title><link>https://virgool.ir/Programming-in-deep/فرق-بین-http1-http2-http3-foepebnsr1ng</link><description>مدت کوتاهی است که  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/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 aioquicRust – quiche, neqo, and quinnC – nghttp3 and lsquicGo – quicgoJavaScript – Node.js</description><category>برنامه نویسی یه مقدار عمیق تر</category><author>سیاوش بشارتی نیا</author><pubDate>Mon, 11 Oct 2021 12:45:27 +0330</pubDate></item></channel></rss>