http2 چیست و چرا مهم است؟
نگارش جدید HTTP یعنی HTTP/2، بعد از ۲۰ سال یک ارتقا اصلی و بنیادی پس از HTTP/1.1 است. با HTTP/2 تاثیر Latency و ارتباط ها در وب سرورها کاهش می یابد. در واقع HTTP/2 یک طراحی مجدد بر روی شماتیک کارکرد HTTP و نحوه جریان ارتباط های TCP میباشد.
پیشرفت اصلی HTTP/1.1 استفاده از ارتباط های مداوم جهت پاسخگویی چند درخواست در یک ردیف بود. در HTTP/2 یک ارتباط مداوم مورد استفاده قرار میگیرد تا چندین درخواست همزمان را پاسخ دهی کرد. در این بین HTTP/2 چندین قابلیت مجزای دیگر را نیز معرفی کرده است که این امکان را فراهم نموده تا بازدهی HTTP را در شبکه بهبود بخشد.
HTTP2 چیست و چگونه از HTTP/2 استفاده کنیم؟
IETF کارگروه مهندسی اینترنت تغییرات نسخهی دوم پروتکل انتقال ابرمتن را اینگونه توصیف کرده است:
- HTTP2 امکان استفادهی بهینهتر از منابع شبکه را فراهم میکند و ازطریق فشردهسازی فیلد هدر و امکان مبادلهی همزمان در یک اتصال، تأخیر را کاهش میدهد.
- درخواستها را اولویتبندی میکند و به درخواستهای مهمتر، سریعتر پاسخ میدهد؛ درنتیجه بازدهی افزایش مییابد.
- HTTP2 امکان پردازش بهینهی پیغامها را ازطریق فریمبندی باینری پیغام فراهم میکند.
- تعریف HTTP2 جایگزین دستورالعمل HTTP1.1 است؛ البته تنها جایگزین آن نیست. معنای HTTP در این تعریف ثابت است.
اهداف اصلی شکلگیری HTTP/2
با این تفاسیر، اهداف اصلی پیادهسازی HTTP/2 کاهش دادن زمان لود صفحات وب بود؛ گرچه توضیح پیرامون نحوه پیادهسازی دومین نسخه از این پروتکل بسیار فنی و پیچیده میشود، اما در ادامه سعی میکنیم به زبانی گویا و ساده این مسئله را تشریح کنیم.
- نسخه HTTP/2 حاوی دادههای باینری (دودویی) است: HTTP/1.1 از دادههای متنی استفاده میکند و این در حالی است که دادههای متنی به طور کلی در سراسر شبکه از بازدهی کمتری نسبت به دادههای باینری برخوردارند.
- هِدِرهای HTTP/2 فشرده شده هستند: به طور کلی منظور از Header اطلاعاتی است که در پاسخ به یک ریکوئست ارسال میشود که شامل دیتا، مبدا، نوع، حجم، مدت زمان کَش و موارد دیگر است. برخلاف HTTP/1.1، این دادهها در نسخه HTTP/2 فشردهسازی میشوند تا پرفورمنس ارتقاء یابد.
- نسخه HTTP/2 اصطلاحاً Asynchronous است: در HTTP/1.1، سرور باید به همان ترتیبی که ریکوئستها را دریافت کرده است، ریسپانسها را ارسال کند اما نسخه HTTP/2 اصطلاحاً Asynchronous است؛ بنابراین پاسخهای سریعتر و در عین حال با حجم کمتری میتواند در زمان کوتاهتری از سمت سرور ارسال شود.
- نسخه HTTP/2 مولتیپلکس است: در HTTP/1.1، فقط یک درخواست روی یک کانکشن اینترنتی TCP در آن واحد میتواند به کار گرفته شود و مرورگرها به طور عادی قادر به ایجاد 4 تا 8 کانکشن با سرور هستند و این در حالی است که ریکوئستهایی با حجم زیاد میتوانند سرعت دانلود فایلهای دیگر را به تأخیر بیندازند! HTTP/2 اجازه ارسال چندین ریکوئست (درخواست) و دریافت ریسپانس (پاسخ) از سمت سرور را به طور همزمان بر روی یک کانکشن امکانپذیر میسازد.
- نسخه HTTP/2 امکان استفاده از Server Push را فراهم میسازد: با استفاده از این نسخه از پروتکل اچتیتیپی، سرور میتواند فایلها -و به طور کلی هر نوع دادهای- را قبل از آنکه ریکوئستی ارسال شود، برای مرورگر بفرستد که به این فناوری اصطلاحاً Server Push گفته میشود. برای مثال، ممکن است شما در پایین صفحه خود به یک اسکریپت لینک دهید. در HTTP/1.1، مرورگر کدهای HTML را دانلود میکند، تجزیه میکند و سپس فایل جاوااسکریپت را بارگذاری میکند (این بارگذاری هنگامی است که با تگ script روبهرو شویم. )سروری که HTTP/2 را ساپورت کند، میتواند چنین فایلی را قبل از اینکه نیاز آن را تشخیص دهد، برای مرورگر ارسال کند که در نتیجه در صورت نیاز، کاربر معطل دانلود شدن فایلهای جیاس نخواهد شد (که این به معنی UX بهتر است).
یک مثال برای درک بهتر HTTP2
همهی ما تجربه یک بار اثاثکشی و مشارکت در این کار را داریم. در یک خانه وسایل زیادی مثل مبل، فرش، ظروف آشپزخانه، وسایل دکوری و اثاثیه دیگری وجود دارد. بیاید فرض کنیم کاملاً دست تنها هستیم و باید به تنهایی این وسایل را از داخل خانه بیرون بیاوریم. این کار چقدر طول خواهد کشید؟
شاید یک روز کامل طول بکشد که یک نفر بتواند همه اثاث خانه را از منزل خارج کند. این همان اتفاقی است که در HTTP1 میافتد. اگر اثاث خانه را مثل فایلهای مختلف داخل یک صفحه درنظر بگیریم، مرورگر باید مدت زمان زیادی صبر کند تا تک تک این فایلها را دریافت و به کاربر نمایش دهد.
حالا بیاید فرض کنیم برای اسباب کشی به دوستان یا خانواده خود اطلاع داده و از ایشان کمک میگیریم. همهی دوستان و اعضای خانواده برای اسبابکشی به منزل ما میآیند. با همکاری و تعامل به سرعت و شاید در کمتر از چند ساعت بتوانیم همه اثاثیه را به خارج از منزل منتقل کنیم.
این همان اتفاقی است که در HTTP2 میافتد. فایلهای داخل یک صفحه به صورت همزمان از سمت سرور به مرورگر ارسال میشود. استفاده از HTTP2 یکی از کارهایی است که میتواند سرعت سایت شما را افزایش دهد. به یاد داشته باشید که؛
در سئو مدرن، تجربه کاربری حرف اول را میزند و بهبود سرعت سایت یکی از فاکتورهای موثر در تجربه کاربری است.
منظور از یک ارتباط برای چندین درخواست در 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 پشتیبانی میکنند اما هیچکدام بدون رمزنگاری از آن پشتیبانی نمیکنند. وبسایت CanIUs دارای یک مرور جدولی برجسته روی پشتیبان فعلی مرورگر HTTP2 است.
تفسیرها و تطبیقهای معکوس بین HTTP1.1 و HTTP2 سرعت بارگذاری صفحه را کاهش میدهند. هیچ دلیلی برای پیشفرض بودن رمزنگاری یا تنظیمات اجباری وجود ندارد. اگر مجوز SSL را روی سایت خود دارید& میتوانید امنیت وب سایت HTTPS خود را با فعالسازی HSTS ارتقا دهید.
پشتیبانی از HTTP2 درمایکروسافت ویندوز وب سرور IIS
مایکروسافت اعلام نموده در IIS ویندوز ۱۰ و ویندوز سرور ۲۰۱۶ از HTTP/2 پشتیبانی می شود. همچنین در حال حاضر HTTP/2 در IIS تنها بر روی TLS قابل استفاده می باشد.برای کسب اطلاعات در حوزه IIS چیست به شما پیشنهاد می شود مقاله ما را مطالعه نمایید.
پشتیبانی از HTTP2 در لینوکس
وب سرور Apache
نسخه ی ۲.۴.۱۲ وب سرور آپاچی با استفاده از ماژول mod_h2 از مزیت HTTP/2 پشتیبانی می کند. البته نصب چندین پچ نرم افزاری بر روی وب سرور برای پشتیبانی از ماژول مذکور مورد نیاز است. از نسخه ی ۲.۴.۱۷ به بعد این پچ ها به صورت توامان در آپاچی ارائه می شوند. این ماژول در حال حاضر به mod_http2 تغییر نام یافته است.
وب سرور Nginx
نسخه ی ۱.۹.۵ وب سرور nginx از HTTP/2 به صورت کامل پشتیبانی می کند.برای کسب اطلاعات در حوزه nginx چیست مقاله تخصصی ما را مطالعه نمایید.
وب سرور LiteSpeed
نسخه ی ۵.۰ وب سرور LiteSpeed از HTTP/2 پشتیبانی می کند.
HTTP/2 با HTTP/1.1 چه تفاوتهایی دارا است؟
واقعیت امر آن است که نام اصلی دومین نسخه از پروتکل اچتیتیپی HTTP/2 است که ایده آن برگرفته از فناوری SPDY میباشد (لازم به ذکر است که پروتکل SPDY در سال ۲۰۰۹ توسط گوگل ابداع شد.)
HTTP/1 دارای یکسری مشکلات است و این در حالی است که این پروتکل در زمانی ساخته شد که حجم صفحات وب به ندرت از 100 کیلو بایت تجاوز میکرد، زبان CSS هنوز فراگیر نشده بود اما زبان JavaScript تازه پایش به وب باز شده بود ولی صرفاً برای یکسری اِفکت ساده و یا وَلیدیشن فرم استفاده میشد.
زمانی که این پروتکل عرضه شد، پهنای باند بالا، فناوری ایجکس، وب اپلیکیشنهای تکصفحهای و فریمورکهای سمت کاربر هنوز وجود خارجی پیدا نکرده بودند و در واقع تحت هیچ عنوان امکان ارسال بیش از چند ریکوئست به سرور برای اجرای کامل یک صفحهٔ وب در مرورگر کاربران وجود نداشت!
آیا HTTP/2 خیلی بهتر عمل میکند؟
این موضوع از یک سرور به سرور دیگری متفاوت است، اما HTTP/2 در مقایسه با HTTP/1.1 و منوط به اینکه از پروتکل امن HTTPS استفاده شده باشد، تا چند برابر سریعتر عمل میکند.
آیا هماکنون زمان مهاجرت به HTTP/2 رسیده است؟
در یک کلام، بله. با این حال، HTTP/2 تنها هنگامی فعال است که نرمافزار وب سروری همچون آپاچی و مرورگر کاربران این پروتکل را ساپورت کنند. هنگامی که هر یک از این دو مورد نتواند با موفقیت پروتکل را اجرا کند، کانکشن دوباره به حالت HTTP/1.1 برمیگردد.
در پایان سال 2016، تقریباً ۱۱٪ از ده میلیون وبسایت HTTP/2 را ساپورت میکردند (لازم به ذکر است که تمام ورژنهای فایرفاکس، سافاری، مایکروسافت اج، گوگل از 200 فاکتور مختلف برای رتبهبندی سایتها استفاده میکند. در بین این فاکتورها، تجربه کاربری اهمیت بسیار بالایی دارد.
استفاده از HTTP2 میتواند سرعت سایت شما را افزایش و زمان انتظار برای لود صفحات وب را کاهش دهد. طبیعتاً افزایش سرعت باعث بهبود تجربه کاربری خواهد شد.
اما این همه مساله نیست. استفاده از HTTP2 به ما کمک میکند که ارتباط میان مرورگر و سرور را سریع و بهینه کنیم ولی آنچه در این ارتباط جابجا میشود هم نیاز به بهینهسازی دارد. منابعی مانند تصاویر، فونتها، فایلهای CSS و JS هرکدام استانداردهایی برای کاهش حجم و اولویت فراخوان دارند که با رعایت کردنشان میتوانیم سرعت سایت را به بالاترین حد ممکن برسانیم.
(کروم و دیگر مرورگرهای مبتنی بر Blink این پروتکل را ساپورت میکنند.)
بررسی Waterfall و تفاوت آن در HTTP2
برای اینکه به صورت کامل و دقیق با HTTP2 آشنا شویم، بیاید نحوه فرخوان فایلها را به صورت واقعی مشاهده کنیم. برای این کار از ابزار Gtmetrix استفاده میکنیم. هنگامی که یک سایت را با استفاده از این ابزار بررسی می کنیم، در بخش Waterfall می توانیم نحوه فراخوان فایلهای مختلف را مشاهده کنیم.
در ستون اول، نام درخواست ها را مشاهده میکنیم. برای مثال درخواست yekan.woff2 مربوط به فرخوان فونت سایت است. ستون دوم مربوط به کد وضعیت درخواست، ستون سوم مربوط به آدرس فرخوانشده، ستون چهارم حجم فایل و در نهایت ستون تایملاین نحوه فرخوان این درخواستها را نشان میدهد.
اگر به قسمت Timeline و به رنگها توجه کنیم، متوجه میشویم که شروع رنگ بنفش در همهی درخواستها یکسان است. یعنی همهی درخواستها بهصورت همزمان فرخوان شدهاند. اما در سایتهایی که از HTTP1 استفاده میکنند، اوضاع چگونه است؟
تصویر Waterfall بالا مربوط به یک فروشگاه اینترنتی است که از پروتکل HTTP1 استفاده میکند. اگر به نحوه فرخوان فایلها دقت کنیم، متوجه میشویم که زمان فرخوان هر فایل پس از فایل دیگر است. بخش کرم رنگ در هر نوار نشاندهنده زمان انتظار مرورگر برای دانلود یک فایل تا ارسال درخواستی دیگر برای فایل بعدی است
مرگ Combine CSS Files ؛ تکنیکی که منسوخ شدهاند
دنیای وب، از زمان شکلگیری به سرعت تغییر پیدا کرده است. با تغییرات مختف فضای وب، تکنیکهای موجود هم تغییر میکنند. با حذف تدریجی HTTP1 و تولد پروتکل جدید وب، بسیاری از تکنیکهایی که در گذشته مورد استفاده متخصصان سئو بود، منسوخ شدهاند.
زمانی که تنها پروتکل وب HTTP1 بود، وبمسترها و متخصصین سئو، برای کاهش سرعت سایت از تکنیکهای مختلفی استفاده می کردند. همهی این تکنیکها بر یک اصل ساده استوار بودند؛ ترکیب کردن.
به عنوان مثال در تکینک Combine CSS Files تمامی فایلهای CSS موجود در یک صفحه یا وبسایت اینترنتی در قالب یک فایل حجیم گردآوریشده و با یک درخواست از سرور دریافت میشود. علت این کار هم کاملاً مشخص است. در HTTP1 فرخوان هر فایل وابسته به فرخوان فایل قبلی بود. با استفاده از تکنیک ترکیبکردن، تعداد درخواستهای (Request) کمشده و سرعت سایت افزایش مییافت.
اما با ورود پروتکل HTTP2 استفاده از این تکنیک تاثیر معکوسی بر سرعت و بهینهسازی صفحه خواهد داشت. برای درک بهتر دلیل آن اجازه دهید به مثال اسبابکشی برگردیم.
فرض کنیم که میتوانیم همهی اثاث خانه را در یک جعبه بسیار بزرگ جای داده و با یک حرکت همه وسایل را از خانه خارج کنیم! این کار تا زمانی معنی میدهد که شما توان جابجا کردن آن بسته بزرگ را داشته باشید ولی چند نفر در دنیا هستند که میتوانند یخچال و ماشین لباسشویی را همزمان جابجا کنند؟
اگر سرور شما از پروتکل HTTP2 برای ارسال فایل و ارتباط با مرورگر استفاده میکند ترکیب کردن فایلهای CSS و JS نه تنها کمکی به سرعت لود صفحه نخواهد کرد بلکه موجب میشود تا عملا از همان HTTP1 برای ارتباط با سرور استفاده کنید.
جهت مشاوره رایگان با ما تماس بگیرید:
۰۲۱-۲۸۴۲۸۶۷۶ برای تماس مستقیم
۰۹۰۳۸۴۸۱۰۱۲ (فقط چت واتس اپ)
ایمیل: info@aranikweb.ir