پروتکل HTTP/2 یا انتقال اَبَرمتن (HTTP - Hyper Text Transfer Protocol)، یک پروتکل ساده، محدود و خسته کننده، در لایه application است که پایه و اساس شبکه وب را تشکیل می دهد. در واقع، HTTP امکان دسترسی به منابع تحت شبکه در سراسر دنیای دیجیتال را فراهم می سازد و در طول دهه ها تکامل یافته تا بستری سریع، ایمن و کامل برای ارتباطات دیجیتال ارائه دهد.
در این مقاله جامع، پروتکل HTTP/2 از اطلاعات پایه تا مباحث پیشرفته تر و هر آنچه که باید درباره آن بدانید، بررسی خواهد شد.
پروتکل HTTP چیست؟
HTTP در ابتدا توسط Tim Berners-Lee، پیشگام شبکه جهانی وب پیشنهاد شد، کسی که این پروتکل کاربردی را با در نظر گرفتن سادگی طراحی کرد تا عملکردهای ارتباطی سطح بالا بین وب سرورها و مشتریان را انجام دهد.
تصویر(1)
در فوریه 2015، "گروه کاری HTTP در کارگروه مهندسی اینترنت" (IETF) نسخه اصلی دوم این پروتکل کاربردی را در قالب HTTP/2 توسعه داد.
پروتکل چیست؟
مقایسه و بررسی تفاوت HTTP/1 و HTTP/2 باید با مروری کوتاه بر اصطلاح "پروتکل" که به طور مکرر در این مقاله استفاده شده، آغاز شود. پروتکل مجموعه ای از قوانین است که مکانیزم های ارتباطی بین مشتریان (برای مثال مرورگرهای مورد استفاده کاربران اینترنت جهت درخواست اطلاعات) و سرورها (ماشین هایی که اطلاعات درخواست شده را در اختیار دارند) را تنظیم می کند.
پروتکل ها معمولاً از سه بخش اصلی شامل Header، Payload و Footer تشکیل می شوند. Header که قبل از Payload قرار می گیرد شامل اطلاعاتی مانند آدرس مبدا و مقصد و سایر جزئیات (مانند حجم و نوع) در مورد Payload می باشد. Payload همان اطلاعات اصلی است که توسط پروتکل منتقل می شود. Footer بعد از Payload قرار می گیرد و بهعنوان یک فیلد کنترلی عمل میکند تا همراه با Header درخواستهای میان کلاینت و سرور را به مقصد درست هدایت کرده و اطمینان حاصل کند که دادههای موجود در Payload بدون خطا منتقل شدهاند.
تصویر(2)
این سیستم مشابه خدمات پست نامه است. نامه (Payload) درون یک پاکت (Header) قرار می گیرد که آدرس مقصد روی آن نوشته شده و سپس با چسب و تمبر پستی (Footer) مهر و موم و ارسال می شود. با این تفاوت که انتقال اطلاعات دیجیتال به این سادگی نیست و نیازمند نوآوریهای جدیدی است که در پاسخ به پیشرفت های فناوری و رشد انفجاری استفاده از اینترنت ایجاد شدهاند.
پروتکل HTTP در ابتدا شامل مجموعه ای از دستورات ساده بود:
- GET برای دریافت اطلاعات از سرور
- POST برای ارسال اطلاعات درخواست شده به کلاینت
این مجموعه دستورات اولیه و ظاهراً ساده، پایه ای برای توسعه سایر پروتکل های شبکه شد اما HTTP در مسیر بهبود تجربه کاربران اینترنت و افزایش کارایی ارتباطات آنلاین، تکامل یافت و نیاز به اجرای HTTP/2 برای ارتقاء حضور آنلاین و افزایش سرعت انتقال داده ها، بیش از پیش احساس شد.
HTTP/2 ویژگی هایی مانند ارتباطات چندگانه Multiplexing، فشرده سازی هدرها و کاهش تأخیر را ارائه می دهد که باعث می شود وب سایت ها سریع تر و بهینه تر بارگذاری شوند.
هدف از ایجاد پروتکل HTTP/2
بررسی دلیل ایجاد HTTP/2 می تواند به درک بهتر تفاوت HTTP/1 و HTTP/2 کمک نماید. از زمان پیدایش HTTP در اوایل دهه ۱۹۹۰، این پروتکل تنها چند بار تغییرات اساسی را تجربه نمود. نسخه HTTP/1.1 بیش از ۱۵ سال دنیای اینترنت را پشتیبانی کرده است. با ظهور صفحات وب پویا، محتوای چندرسانهای (multimedia) سنگین و تمرکز زیاد بر عملکرد بالای وب، فناوری های قدیمی در دسته پروتکل های سنتی (Legacy Technologies) قرار گرفته اند.
این ترندها، نیاز به تغییرات مهم در HTTP/2 را بیشتر کردهاند تا تجربه کار با اینترنت، بهینه تر و سریعتر شود. پروتکل HTTP/2 با ارائه ویژگی هایی مانند ارتباطات چندگانه (Multiplexing)، کاهش تاخیر (Latency Reduction) و فشرده سازی هدرها، کمک می کند تا وب سایت ها سریع تر بارگذاری شوند و استفاده بهتری از منابع شبکه داشته باشند.
تصویر(3)
هدف اصلی تحقیق و توسعه نسخهای جدید از HTTP، تمرکز بر سه ویژگی کلیدی است که بهندرت تمام آنها در یک پروتکل شبکه و بدون افزودن فناوریهای مکمل دیده میشوند:
- سادگی
- عملکرد بالا
- پایداری
این اهداف با افزودن قابلیت هایی که تاخیر را در پردازش درخواست های مرورگر کاهش می دهند، محقق می شوند. از جمله این تکنیکها میتوان به multiplexing، فشردهسازی، اولویتبندی درخواستها و server push اشاره کرد.
مکانیزم هایی مانند کنترل جریان (flow control)، ارتقا و مدیریت خطا، به عنوان بهبودهایی برای پروتکل HTTP عمل می کنند تا توسعه دهندگان بتوانند بازدهی بالا و پایداری برنامه های تحت وب را تضمین نمایند.
این سیستم جامع به سرورها اجازه می دهد تا محتوایی بیشتر از آنچه کاربران در ابتدا درخواست کردهاند، بهطور مؤثر ارسال کنند. بدین ترتیب، نیازی به مداخله مداوم کاربر برای درخواست اطلاعات نیست و وبسایت میتواند بدون وقفه و بهطور کامل در مرورگر بارگذاری شود. برای مثال، قابلیت Server Push در HTTP/2 این امکان را به سرور میدهد تا علاوه بر اطلاعاتی که از قبل در کش مرورگر موجود است، کل محتوای یک صفحه را نیز ارسال کند. همچنین فشرده سازی کارآمد هدرهای HTTP باعث کاهش سربار پروتکل میشود و در نتیجه، عملکرد هر درخواست مرورگر و پاسخ سرور بهبود مییابد.
تغییرات HTTP/2 به گونه ای طراحی شده اند که سازگاری و تعامل پذیری با HTTP/1.1 را حفظ کنند. انتظار می رود که مزایای HTTP/2 در گذر زمان با آزمایش های واقعی، بیشتر نمایان شود. توانایی آن جهت رفع مشکلات عملکردی نسبت به HTTP/1.1 نقش مهمی در روند تکامل بلندمدت این پروتکل ایفا خواهد کرد.
نسخه جدید HTTP، گسترش نسخه قبلی بوده است و انتظار نمی رود که در آینده ای نزدیک کاملا جایگزین HTTP/1.1 شود. HTTP/2 به طور خودکار از تمامی انواع رمزنگاری موجود در HTTP/1.1 پشتیبانی نمی کند اما بدون شک زمینه را برای گزینه های بهتر یا بروزرسانی هایی جهت سازگاری با رمزنگاری ها در آینده، فراهم خواهد کرد.
با این حال، مقایسههایی مانند پروتکل HTTP/2 و HTTP/1.1 یا SPDY و HTTP/2 نشان داده که نسخه جدیدتر در زمینههایی مانند عملکرد، امنیت و پایداری بهطور قاطع برنده شناخته میشود.
تصویر(4)
مشکل اصلی HTTP/1.1 چه بود؟
مشکل اصلی این بود که HTTP/1.1 فقط قادر به پردازش یک درخواست فعال در هر اتصال TCP بود. این محدودیت باعث می شد که مرورگرها مجبور شوند چندین اتصال TCP ایجاد کنند تا بتوانند درخواست های متعدد را به صورت همزمان پردازش نمایند.
اما استفاده از اتصالات متعدد TCP موجب ازدحام می شود که منجر به تخصیص ناعادلانه منابع شبکه خواهد شد. مرورگرهایی که اتصالات متعددی را برای پردازش درخواست های اضافی استفاده می کنند، سهم بیشتری از منابع شبکه را اشغال خواهند کرد و در نتیجه عملکرد شبکه برای سایر کاربران کاهش می یابد.
تصویر(5)
ارسال چندین درخواست از مرورگر، موجب تکرار داده ها در مسیر انتقال اطلاعات میشود که برای استخراج داده های صحیح و بدون خطا در گره های پایانی (End-Nodes) نیاز به پروتکل های اضافی خواهد بود.
اکوسیستم اینترنت بهطور طبیعی مجبور شد برای رفع این محدودیت ها از روش هایی مانند Domain Sharding، Concatenation، Data Inlining و Spriting بهره ببرد اما استفاده غیر بهینه از اتصالات TCP در HTTP/1.1 نیز باعث اولویت بندی نامناسب منابع می شود که با پیچیده تر شدن برنامه های تحت وب از نظر عملکرد، قابلیت ها و دامنه پوشش، منجر به کاهش کارایی شبکه خواهد شد. همین مشکلات یکی از دلایل کلیدی توسعه پروتکل HTTP/2 بود که با کاهش تأخیر ارتباطی و بهینه سازی مدیریت منابع شبکه، توانست عملکرد اینترنت را بهبود ببخشد.
تصویر(6)
وب امروزی فراتر از ظرفیت فناوریهای شبکهای مبتنی بر HTTP قدیمی تکامل یافته است. ویژگی های اصلی HTTP/1.1 که بیش از یک دهه پیش توسعه یافته اند، باعث ایجاد نقاط ضعف قابل توجهی در عملکرد و امنیت شده اند.
برای مثال، هک کوکی (Cookie Hack) به مجرمان سایبری اجازه می دهد تا سشن قبلی را مجدداً استفاده کنند و رمزعبور حساب ها را سرقت نمایند زیرا HTTP/1.1 هیچ مکانیزمی برای بررسی اعتبار endpoint سشن ها ارائه نمی کند. در حالی که نگرانی های امنیتی مشابه همچنان در پروتکل HTTP/2 وجود دارند اما این پروتکل با قابلیت های امنیتی مانند اجرای بهتر ویژگی های جدید TLS، طراحی شده است تا مقاومت بیشتری در برابر تهدیدات امنیتی داشته باشد.
ویژگیهای HTTP/2
پروتکل HTTP/2 توسط معرفی ویژگیهای نوین، عملکرد، امنیت و کارایی ارتباطات وب را در مقایسه با نسخههای قبلی بهطور چشمگیری بهبود میبخشد. در ادامه لیستی از این ویژگیهای HTTP/2 معرفی شده است.
استریم چندگانه (Multiplexed Streams)
استریم ها (Streams) در پروتکل HTTP/2 به تبادل دوطرفه فریم های متنی گفته می شود که بین سرور و کلاینت منتقل می شوند. در نسخه های قبلی HTTP، فقط امکان ارسال یک استریم در آن واحد وجود داشت و بین هر انتقال تاخیر زمانی ایجاد می شد.
دریافت حجم بالای محتوای رسانهای (media) از طریق استریم های مجزا و متوالی، نه تنها غیربهینه است بلکه منابع زیادی از شبکه را مصرف می کند. تغییرات پروتکل HTTP/2 این مشکل را با ایجاد "لایه فریم بندی باینری" (Binary Framing Layer) جدید برطرف کرده است. این لایه به کلاینت و سرور اجازه می دهد که Payload را به دنباله ای از فریم های مستقل، کوچک و قابل مدیریت تجزیه کنند. سپس این اطلاعات در سمت دیگر مجددا بازسازی می شوند.
تصویر(7)
قالب های فریم باینری، امکان تبادل همزمان چندین دنباله مستقل دو طرفه را بدون ایجاد تاخیر بین جریان های متوالی، فراهم می کنند. این رویکرد مجموعه ای از مزایای HTTP/2 را به شرح زیر ارائه می دهد:
- درخواست ها و پاسخ های چندگانه (Multiplexed) به صورت موازی اجرا شده و مانع یکدیگر نمیشوند.
- حتی هنگام ارسال چندین استریم داده، یک اتصال TCP واحد برای استفاده بهینه از منابع شبکه، به کار می رود.
- نیازی به تکنیک های بهینه سازی غیرضروری مانند Image Sprites، Concatenation و Domain Sharding که می توانند عملکرد سایر بخش های شبکه را مختل کنند، نیست.
- کاهش تاخیر، افزایش سرعت بارگذاری صفحات وب و بهبود رتبه در موتورهای جستجو.
- کاهش هزینه های عملیاتی (OpEx) و سرمایه ای (CapEx) در مدیریت شبکه و منابع فناوری اطلاعات.
این قابلیت به بسته های داده ای از چندین استریم اجازه می دهد تا با یکدیگر ترکیب شوند و از طریق یک اتصال TCP واحد ارسال گردند. در سمت دریافت، این بسته ها تفکیک شده و به عنوان استریم های داده مستقل، نمایش داده می شوند. در نسخه های HTTP/1.1 و قبل از آن، ارسال درخواست های موازی به طور همزمان، نیازمند چندین اتصال TCP بود اما این روش باعث ایجاد گلوگاه (Bottleneck) در عملکرد کلی شبکه می شد زیرا با وجود سرعت انتقال بالاتر، مدیریت منابع شبکه به شکل غیربهینه انجام می گرفت.
HTTP/2 Server Push
این قابلیت به سرور اجازه میدهد اطلاعات قابل کش بیشتری را برای کلاینت ارسال کند؛ اطلاعاتی که هرچند درخواست نشدهاند اما پیشبینی میشود طی درخواستهای آینده مورد نیاز باشند.
فرض کنید کلاینت درخواست منبع X را ارسال کند اما مشخص است که منبع Y نیز با فایل درخواست شده ارتباط دارد. در HTTP/1.1، مرورگر ابتدا X را دریافت کرده و سپس در یک درخواست جداگانه Y را دریافت می کند اما در پروتکل HTTP/2، سرور می تواند همزمان Y را همراه با X ارسال نماید بدون اینکه منتظر درخواست جدید از کلاینت باشد.
مزایای این قابلیت:
- کاهش تاخیر بارگذاری صفحات
- بهبود تجربه کاربری و عملکرد
- استفاده کارآمدتر از منابع شبکه
تصویر(8)
در پروتکل HTTP/2، کلاینت منبع Y را که توسط سرور ارسال شده در کش خود ذخیره میکند تا بتواند در آینده از آن استفاده نماید. این مکانیزم با کاهش تعداد رفت و برگشت های درخواست-پاسخ، تاخیر شبکه را به میزان قابل توجهی کاهش می دهد. یکی دیگر از تغییرات مهم در پروتکل HTTP/2 این است که Server Push می تواند کش کلاینت را بروزرسانی یا حتی باطل کند که به آن "Cache Push" نیز گفته می شود.
اما یکی از چالش های بلندمدت این ویژگی مربوط به توانایی سرورها در شناسایی منابعی می باشد که ممکن است کلاینت واقعاً نیازی به آنها نداشته باشد. این موضوع می تواند منجر به مصرف غیرضروری منابع شبکه شود و در برخی موارد حجم داده های کش شده را افزایش دهد.
مزایای HTTP/2 برای منابع Push شده
پروتکل HTTP/2 همراه با سایر مزایای این پروتکل که در زیر لیست شده اند؛ عملکرد قابل توجهی را برای منابع Push شده ارائه می دهد.
- کلاینت منابع Push شده را در کش ذخیره می کند.
- کلاینت می تواند از این منابع کش شده در صفحات مختلف استفاده نماید.
- سرور میتواند منابعی را که بهصورت Push ارسال میکند، همراه با اطلاعاتی که کاربر مستقیما درخواست کرده، در همان اتصال TCP و بهصورت چندگانه (Multiplexed) منتقل نماید.
- سرور می تواند منابع Push شده را اولویت بندی کند که تفاوت مهمی در عملکرد بین پروتکل HTTP/2 و HTTP/1 ایجاد خواهد کرد.
- کلاینت می تواند منابع Push شده را رد کند تا یک مخزن کش موثر حفظ شود یا قابلیت Server Push را کاملاً غیرفعال نماید.
- کلاینت (کاربر) نیز میتواند تعداد استریم هایی که بهصورت همزمان توسط سرور ارسال میشوند را محدود کند.
تصویر(9)
پروتکل های باینری در HTTP/2
نسخه جدید HTTP از نظر قابلیت ها تغییرات قابل توجهی داشته و یکی از ویژگی های کلیدی آن تبدیل شدن از پروتکلی متنی به پروتکلی باینری است.
در HTTP/1.x، پردازش دستورات متنی برای تکمیل چرخه درخواست-پاسخ انجام می شد اما در پروتکل HTTP/2، این وظایف با استفاده از دستورات باینری (ترکیبات ۰ و ۱) اجرا می شوند. این تغییر، پیچیدگی های مربوط به فریم بندی داده ها را کاهش می دهد و پیاده سازی دستورات را ساده تر می کند زیرا در نسخه های متنی، دستورات و فاصله های اختیاری به طور ناهمگون ترکیب می شدند و ممکن بود خوانایی و پردازش آنها دشوار باشد.
اگرچه خواندن دستورات باینری دشوارتر از متن است اما برای شبکه، تولید و تجزیه فریم های باینری ساده تر انجام می شود. با وجود این تغییرات، معنای واقعی دستورات ثابت باقی می مانند و عملکرد پروتکل بدون تغییر در ساختار کلی ارتباطات ادامه دارد.
تصویر(10)
پروتکل باینری در HTTP/2 و مزایای آن
مرورگرهایی که از پروتکل HTTP/2 استفاده می کنند، دستورات متنی را به باینری تبدیل خواهند کرد تا آنها را از طریق شبکه انتقال دهند. لایه فریمبندی باینری، با کلاینت ها و سرورهای HTTP/1.x سازگار نیست اما عامل کلیدی در بهبود عملکرد نسبت به SPDY و HTTP/1.x محسوب می شود.
مزایای استفاده از دستورات باینری در پروتکل HTTP/2:
- کاهش سربار پردازش داده ها: یکی از مهم ترین مزایای HTTP/2 نسبت به HTTP/1 است.
- کاهش احتمال بروز خطاها.
- کاهش میزان ردپای شبکه (Network Footprint).
- بهینه سازی استفاده از منابع شبکه.
- حذف نگرانی های امنیتی مرتبط با ساختار متنی HTTP/1.x.
- فعالسازی قابلیت های مهم HTTP/2 مانند فشرده سازی، Multiplexing، اولویت بندی، کنترل جریان (Flow Control) و مدیریت TLS.
- نمایش فشرده تر دستورات که پردازش و پیاده سازی آنها را ساده تر می کند.
- بهبود کارایی و پایداری در پردازش داده بین کلاینت و سرور.
- کاهش تاخیر شبکه و بهبود توان عملیاتی.
اولویت بندی استریم ها در HTTP/2
در پروتکل HTTP/2، کلاینت می تواند اولویت خاصی را برای استریم داده ها مشخص کند. این قابلیت به سرور اجازه می دهد تا با اینکه ملزم به رعایت این اولویت بندی نیست؛ منابع شبکه را بر اساس نیازهای کاربر نهایی بهینه سازی کند.
تصویر(11)
اولویت بندی استریم ها، با وابستگی ها و وزن اختصاص داده شده به هر کدام از آنها عمل میکند. اگرچه تمام استریم ها ذاتاً به یکدیگر وابسته هستند اما وزنی بین ۱ تا ۲۵۶ را دریافت می کنند.
در دنیای واقعی، سرور به ندرت کنترل کاملی بر منابعی مانند پردازنده (CPU) و اتصالات پایگاه داده دارد. پیچیدگی های پیاده سازی باعث می شود تا سرورها نتوانند به طور کامل درخواست های اولویت بندی استریم ها را پشتیبانی کنند.
تحقیق و توسعه در این زمینه برای موفقیت بلندمدت HTTP/2 اهمیت زیادی دارد زیرا این پروتکل قابلیت پردازش چندین استریم داده در یک اتصال TCP واحد را خواهد داشت. این قابلیت می تواند منجر به دریافت همزمان درخواست های سرور شود که از نظر اولویت بندی برای کاربر نهایی متفاوت هستند. تاخیر تصادفی در پردازش استریم داده، موجب کاهش کارایی و تجربه کاربری موردانتظار از HTTP/2 می شود.
در مقابل، یک مکانیزم اولویت بندی هوشمند و فراگیر می تواند مزایای زیر را برای HTTP/2 به همراه داشته باشد:
- استفاده مؤثر از منابع شبکه
- کاهش زمان ارسال درخواست های محتوای اصلی
- بهبود سرعت بارگذاری صفحات و تجربه کاربری
- بهینه سازی ارتباط بین کلاینت و سرور
- کاهش تأثیر منفی ناشی از تاخیر شبکه
تصویر(12)
فشرده سازی هدرها با حفظ وضعیت (Stateful Header Compression)
پروتکل HTTP بدون وضعیت (Stateless) است، بدین معنا که هر درخواست کلاینت باید تمام اطلاعات لازم جهت اجرای عملیات موردنظر را برای سرور ارسال کند.
این مکانیزم باعث می شود استریم داده ها شامل چندین فریم تکراری اطلاعات باشند تا سرور نیازی به ذخیره اطلاعات درخواست های قبلی کلاینت نداشته باشد.
در وب سایت هایی که محتوای رسانه ای زیادی ارائه می دهند، کلاینت ها چندین فریم هدر تقریباً مشابه را ارسال می کنند که موجب افزایش تأخیر و مصرف غیرضروری منابع محدود شبکه می شود. ترکیب اولویت بندی استریم داده ها بدون بهینه سازی این مکانیزم، نمی تواند استانداردهای عملکردی مطلوب در پردازش موازی را محقق کند.
تصویر(13)
اجرای HTTP/2 این مشکلات را با قابلیت فشرده سازی تعداد زیادی از فریم های هدر تکراری برطرف می کند. این پروتکل از مشخصات HPACK به عنوان یک روش ساده و امن برای فشرده سازی هدرها استفاده می نماید.
طی این فرآیند، کلاینت و سرور هر دو لیستی از هدرهای استفاده شده در درخواست های قبلی را نگه می دارند. HPACK مقدار هر هدر را قبل از انتقال به سرور فشرده سازی می کند. سپس سرور اطلاعات رمزگذاری شده را در لیست هدرهای منتقل شده قبلی جستجو خواهد کرد تا اطلاعات کامل هدر را بازسازی نماید.
فشرده سازی هدر با HPACK در HTTP/2، مزایای قابل توجهی از نظر عملکرد دارد، مانند:
- اولویت بندی مؤثر استریم داده ها
- استفاده بهینه از مکانیزم های چندگانه (Multiplexing)
- کاهش سربار منابع
- رمزگذاری هدرهای بزرگ و رایج که نیاز به ارسال کامل فریم هدر را برطرف می کند و موجب کاهش سریع حجم انتقال هر استریم داده می شود.
- عدم آسیب پذیری در برابر حملات امنیتی مانند CRIME که از استریم داده ها با هدرهای فشرده، سوء استفاده می کند.
در این بخش با مفاهیم پایهای پروتکل HTTP/2 آشنا شدید و ساختار کلی آن بررسی گردید. در قسمت دوم، به جزئیات فنیتر، مزایا و کاربردهای HTTP/2 پرداخته می شود.