HTTP/2 چیه و چطور کار میکنه؟

اگر برنامه‌نویس هستید احتمالا درمورد HTTP/2 شنیدید، فکر نمیکردم چیز مهمی باشه و تاثیری روی کار من داشته باشه تا وقتی که به قضیه مایکروسرویس‌ها رسیدم، اونجا HTTP/2 نقش مهمی داره و اگر درست درکش نکرده باشید نمیتونید از خیلی چیزا سر دربیارید، البته درنظر داشته باشید حداقل تو کیس ما لازم نیست خیلی دیپ بشیم و فقط درک نحوه کارکردش میتونه کارمون راه بندازه.

اول از همه انتظار دارم ازتون وارد این سایت بشید و روی دکمه click to load again بزنید، در سمت راست تصویر با HTTP/1 لود میشه و در سمت چپ با HTTP/2، از همینجا میشه به تفاوت سرعتشون پی‌برد، خب حالا چطور اینقدر سرعتش بیشتر شده؟

HTTP/1.1 چطور کار میکنه؟

قبل اینکه بخوایم بگیم چرا اینقدر سرعت HTTP/2 بیشتره باید بدونم HTTP/1 چیه و چطور کار میکنه، HTTP/1.1 درسال ۱۹۹۷ معرفی شد و در اون زمان خیلی موفق بود، HTTP/1.1 برای هر ریکوئست یک کانکشن TCP باز میکنه، همینطور هدرهای هر ریکوئست به صورت تکست خام ارسال میشن و فشرده سازی روشون اعمال نمیشه، برای هر ریکوئست یک ریسپانس ارسال میشه (سرور پوش وجود نداره)، همینطور فقط دو متدو براش وجود داره، GET برای دریافت دیتا و POST برای ارسال دیتا. (شاید بگید متدهای دیگه‌ای مثل PATCH، PUT, DELETE و... وجود دارند که باید بگم تفاوتی با متد POST ندارن و به طور اصلی فقط همین دو متد وجود دارن)

خب حالا در نظر بگیرید که هر وبسایت به صورت متوسط از ۸۰ فایل متفاوت تشکیل شده (عکس‌ها، CSS، JS و...) و در هر ریکويست برای این فایلها تمام هدرهای موجود رو ارسال میکنه (بدون فشرده سازی) و برای هر ریکوئست یک کانکشن TCP باز میکنه.

در مثال بالا کاربر درخواست میده فایل HTML یک سایت دریافت کنه و سرور پاسخ میده، کاربر دوباره یک کانکشن TCP دیگه باز میکنه برای فایل CSS و سرور دوباره پاسخ میده، این کار برای هر سایت حدود ۸۰ بار انجام میشه و این اتفاقیه که برای لود تصویر با HTTP/1.1 در این سایت میفته.

HTTP/2 چطور کار میکنه؟

و اما HTTP/2 در سال ۲۰۱۵ معرفی شد، البته از خیلی سال پیش توسط گوگل و به اسم SPDY تست شده بود، HTTP/2 از قابلیت مولتی‌پلکسینگ (multiplexing) پشتیبانی میکنه، یعنی کاربر و سرور میتونند در یک ارتباط TCP چندین مسیج ارسال کنند، همچنین در HTTP/2 قابلیت سرور پوش داریم، یعنی کاربر فقط درخواست یک فایل میده و سرور میتونه چندین فایل ارسال کنه، برای مثال کاربر درخواست فایل HTML میده و سرور فایل HTML به علاوه CSS, JS, Image و... ارسال میکنه، همچنین HTTP/2 قابلیت فشرده سازی هدرهارو داره، HTTP/2 باینری است، این تغییر بزرگیه، در HTTP/1.1 خیلی راحت میتونستید دیباگ کنید ولی اینجا به علت باینری بودن کار سخت میشه، HTTP/2 امنه، SSL الزامی نیست ولی به صورت پیش‌فرض پیشنهاد میشه.

HTTP/2
HTTP/2