برای افزایش سرعت و بازدهی بین اپلیکیشن و سرور باید به سراغ HTTP2 بروید. در این مقاله ما به شما می گوییم HTTP/2 چیست؟ و چگونه باید از آن استفاده کرد. در ادامه این مقاله با ما همراه باشید.
http2 چیست؟
نگارش جدید HTTP یعنی HTTP/2، بعد از ۲۰ سال یک ارتقا اصلی و بنیادی پس از HTTP/1.1 است. با HTTP/2 تاثیر Latency و ارتباط ها در وب سرورها کاهش می یابد. در واقع HTTP/2 یک طراحی مجدد بر روی شماتیک کارکرد HTTP و نحوه جریان ارتباط های TCP می باشد. پیشرفت اصلی HTTP/1.1 استفاده از ارتباط های مداوم جهت پاسخگویی چند درخواست در یک ردیف بود. در HTTP/2 یک ارتباط مداوم مورد استفاده قرار می گیرد تا چندین درخواست همزمان را پاسخ دهی کرد. در این بین HTTP/2 چندین قابلیت مجزای دیگر را نیز معرفی کرده است که این امکان را فراهم نموده تا بازدهی HTTP را در شبکه بهبود بخشد.
منظور از یک ارتباط برای چندین درخواست در HTTP2 چیست؟
هر ارتباط TCP برای راه اندازی نیاز به طی نمودن یک مسیر دایره وار دارد. اگر شما از رمزنگاری استفاده می کنید، برقرار ارتباط TLS یک الی دو مسیر دایره وار مازاد نیز طی می کند. تمام این موارد قبل از تبادل اولین بایت پاسخ بین سرور و مرورگر انجام می شود. به جای ایجاد یک ارتباط جدید با استفاده از ارتباطی که از قبل ایجاد شده این عملیات بالا دستی می تواند تنها یک بار انجام شود و بین ارتباط های آتی به اشتراک گذارده شود. در ادامه ی کار این اشتراک گذاری باعث به حداقل رساندن زمان برقراری ارتباط ها می شود. HTTP/2 زمان انتظار برای آغاز یک ارتباط را بسیار کاهش داده و دیگر درخواست ها در صف برای انجام عملیات Handshake با سرور باقی نمی مانند. همچنین ارتباط ها تا زمان به پایان رسیدن ارتباط قبلی یا idle شدن آنها صبر نمی کنند. از انجاییکه یک ارتباط بین چندین درخواست تسهیم شده، درخواست ها می توانند به صورت آنی ارسال شده و دیگر برای تکمیل شدن دیگر درخواست ها منتظر نمانند.
فشرده سازی Header با HPACK در HTTP/2
در واقع HTTP برای مدت طولانی می باشد که از فرشده سازی داده ها پشتیبانی می کند. اما Header ها به صورت فشرده نشده و در قالب متن با فراوانی و حشو زیاد ارسال می شوند. (درخواست های خیلی از header های طولانی با داده های کاملا یکسان ارسال می شوند!) HTTP/2 قابلیت جدیدی با نام HPACK را معرفی کرده است، این قابلیت یک طرح کلی برای هدرهای HTTP است که درخواست های متعدد و حشو را کاهش می دهد.
فشرده سازی به تسهیم نمودن درخواست ها کمک می کند، زیرا درخواست ها کوچکتر می باشند. این امر کاربران را قادر می سازد تا تعداد درخواست های زیادی را در اولین پکت های ارسالی خود به سرور ارسال نمایند، در حالیکه پنجره ی کنترل جریان TCP هنوز کوچک می باشد.
SPDY چیست؟
SPDY پروتکل شبکه ای با خصوصیات باز است که در اصل برای انتقال محتوای وب در Google تهیه شده است. SPDY با هدفهای خاص کاهش تأخیر در بارگذاری صفحات وب و بهبود امنیت وب ، از ترافیک HTTP دستکاری می کند.
Server Push
درخواست ها با الگوی قابل پیش بینی دریافت می شوند. اگر کاربر درخواست یکی از منابع را نماید، سرور معمولا می تواند پیش بینی نماید که بعد از آن در صفحه چه منابع دیگری فراخوانی می شوند. در HTTP/1.1 کدنویسی بین خطوط استفاده می شد تا این منابع را در همان بایت های اولیه پاسخ دهد. کدنویسی بین خطوط اشکالاتی دارد – یکی از مهمترین آنها این است که کدنویسی موجود در بین خطوط قابل کش شدن نیستند و در نتیجه در صفحاتی که از کدنویسی یکسان استفاده کرده قابل استفاده نبوده و می بایست مجدد بارگذاری شوند.
در نسخه ی جدید HTTP مفهوم جدیدی به نام “Push” معرفی شده است – سرور به درخواست هایی پاسخ ارسال می کند که هنوز ایجاد نشده اند. این عملیات با استفاده از پیش بینی عملکرد کاربر انجام می شود. این کار باعث می شود تا سرورها بتوانند مزایای عکس العمل مشابه کدنویسی بین خطوط را ارائه دهند اما به صورتیکه کاربران بتوانند این داده ها را کش کرده و در صفحات دیگر استفاده کنند.
چگونه از HTTP/2 استفاده کنیم؟
شاید شما همین الان هم از آن استفاده کرده باشید! از آنجاییکه تقریبا همه ی مرورگرهای امروزی از HTTP/2 در آخرین بروزرسانی خود استفاده می کنند و داده های آماری هم نشان می دهند که بیش از ۵۰% کاربران در حال استفاده از مرورگر هایی هستند که HTTP/2 را پشتیبانی می کنند.
در نظر داشته باشید که HTTP/2 زمانی مورد استفاده قرار می گیرد که کاربر و سرور هر دو آنرا پشتیبانی کنند. در برخی از وب سرور ها تلاش شده تا HTTP/2 به صورت پیاده سازی شود که هرچه بیشتر شفاف باشد و شما نیازی به اعمال تغییرات خاصی جهت راه اندازی آن نداشته باشید. برخی از بهینه سازی های HTTP/1.1 (مانند Domain sharding، کدنویسی بین خطوط و غیره) دیگر در HTTP/2 پشتیبانی نمی شوند، بنابراین شما می بایست برنامه ریزی نمایید تا در آینده این بهینه سازی ها را از وب سایت خود حذف نمایید.
منظور از push در HTTP/2 چیست؟
از انجاییکه push یک قابلیت جدید در HTTP/2 می باشد، یک سری API های جدیدی هستند که شما می بایست آنها را فراخوانی کنید تا بتوانید از مزایای آنها استفاده نمایید. شما با استفاده از API ها URL ها و درخواست های انتخابی را در header های سفارشی لحاظ می کنید که حدس می زنید کاربران آنها را فراخوانی خواهند کرد. اگر push پشتیبانی شود دو اتفاق رخ می دهد:
- یک PUSH_PROMISE به کاربر ارسال می شود تا کاربر بررسی کند آیا منابع مربوطه در کش موجود می باشد یا خیر
- یک درخواست جدید به صف درخواست ها برای منابع push شده قرار می گیرد.
اگر ارتباط برقرار شده از push پشتیبانی نکند (کاربر آنرا غیرفعال نموده یا از HTTP/1.1 استفاده می کند) فراخوانی کاری انجام نداده و باز می گردد. این بدان معنا می باشد که شما بدون نگرانی از بروز مشکلی می توانید از این API استفاده کنید و حتی اگر کاربران از آن پشتیبانی نکنند مشکلی برای وب سایت و بارگذاری آن پیش نمی آید.
محدودیتهای HTTP2
SPDY سیاستهای محدودتری را بر امنیت و رمزنگاری ضروری SSL در تمام اتصالها اعمال میکند. HTTP2 نیازی به رمزنگاری ندارد، اما بسیاری از سرویسها بدون خرید گواهینامه SSL به HTTP2 سرویس نمیدهند.
پشتیبانی از HTTP2 درمایکروسافت ویندوز وب سرور IIS
مایکروسافت اعلام نموده در IIS ویندوز ۱۰ و ویندوز سرور ۲۰۱۶ از HTTP/2 پشتیبانی می شود. همچنین در حال حاضر HTTP/2 در IIS تنها بر روی TLS قابل استفاده می باشد.
پشتیبانی از HTTP2 در لینوکس
وب سرور Apache
نسخه ی ۲.۴.۱۲ وب سرور آپاچی با استفاده از ماژول mod_h2 از مزیت HTTP/2 پشتیبانی می کند. البته نصب چندین پچ نرم افزاری بر روی وب سرور برای پشتیبانی از ماژول مذکور مورد نیاز است. از نسخه ی ۲.۴.۱۷ به بعد این پچ ها به صورت توامان در آپاچی ارائه می شوند. این ماژول در حال حاضر به mod_http2 تغییر نام یافته است.
وب سرور Nginx
نسخه ی ۱.۹.۵ وب سرور nginx از HTTP/2 به صورت کامل پشتیبانی می کند.برای کسب اطلاعات در حوزه nginx چیست مقاله تخصصی ما را مطالعه نمایید.
وب سرور LiteSpeed
نسخه ی ۵.۰ وب سرور LiteSpeed از HTTP/2 پشتیبانی می کند.