021 - 9107 0175

آشنایی با پروتکل HTTP3

آشنایی با پروتکل HTTP3

HTTP یا HyperText Transfer Protocol، یک پروتکل لایه کاربرد (Application) بوده و کاربرد اصلی آن ارتباط با یک وب سرور است. پروتکل HTTP در وب استفاده شده و امکان باز کردن صفحات را فراهم می کند. این پروتکل در دهه های ۸۰ و ۹۰ میلادی توسعه یافت و اولین نسخه آن HTTP/1 در سال ۱۹۹۶ و دومین نسخه آن  HTTP/2 در سال ۲۰۱۵ معرفی شد. HTTP/2 با استفاده از Pipeline و فشرده سازی، باعث شد تا سرعت ارتباط افزایش پیدا کند.

HTTP/3 به عنوان آخرین نسخه این پروتکل توسط IETF (Internet Engineering Task Force) معرفی شده است. این پروتکل از چندین تکنولوژی به صورت ترکیبی و در کنار یکدیگر استفاده می کند که موجب افزایش سرعت و امنیت می شود. HTTP/3 داده ها را سریع تر انتقال داده و تاخیر (Latency) را کاهش می دهد تا سرعت آغاز بارگذاری صفحه را افزایش می دهد. HTTP/3 به صورت پیش فرض از TLS 1.3 برای رمزگذاری اطلاعات استفاده می کند تا دیگر نیازی به استفاده از HTTPS وجود نداشته باشد.

 

نحوه کار HTTP/3

HTTP/3 آخرین نسخه پروتکل HTTP محسوب می شود که وظیفه آن، انتقال محتوا از سرورها به بازدیدکنندگان است. برای درک نحوه کار کردن HTTP/3 بایستی که در ابتدا نگاه مختصری به مدل شبکه OSI بیاندازیم. به صورت پیش فرض، HTTP (یک پروتکل لایه ۷) از TCP (یک پروتکل لایه ۴) برای انتقال استفاده می کند. کاربرد TCP برقراری ارتباط بین سرورها و بازدیدکنندگان و تبادل اطلاعات بین آن ها است.

 

osi model

 

TCP و UDP هر دو پروتکل های لایه انتقال (Transport) هستند که برای ارسال داده ها در اینترنت استفاده می شوند. در پروتکل TCP داده ها به صورت مرتب و با قابلیت تشخیص خطا ارسال می شوند و فرآیند ارسال قابل اعتماد است. قابلیت اعتماد بالای TCP مزایای بسیاری دارد اما در صورتی که در فرآیند انتقال حتی یکی از بسته ها مشکلی پیش بیاید، می تواند فرآیند انتقال تمامی بسته ها را دچار مشکل کند. پروتکل UDP ترتیب دهی و قابلیت تشخیص خطا ندارد و در مقایسه با TCP قابلیت اعتماد کم تری دارد، اما سریع تر است.

پروتکل TCP در دهه ۷۰ میلادی توسعه پیدا کرد و در آن زمان، کسی توقع برقراری ارتباطات در لحظه مثل امروز را نداشت. به مرور و با گذشت زمان، مشخص شد که طراحی پروتکل TCP از ابتدا برای سرعت مناسب نبوده است. HTTP/1.0 که از TCP استفاده می کرد، برای هر تبادل هر request/response احتیاج به یک ارتباط جدید داشت که موجب افزایش تاخیر (Latency) می شد.

http1برای حل این مشکل، HTTP/1.1 معرفی شد که دارای دارای برخی بهبودهای مهم از جمله معرفی “keep-alive” بود. keep-alive یا persistent connection امکان استفاده مجدد از ارتباط TCP را فراهم می کرد. یک ارتباط keep-alive نیاز به مراحل آغازین برقراری ارتباط را از بین می برد، هر چند هنوز هم محدودیت هایی وجود داشت. چندین درخواست مختلف می توانستند از یک ارتباط TCP استفاده کنند، اما هنوز هم بایستی به صورت ترتیبی و یکی پس از دیگری ارسال می شدند. این محدودیت باعث می شد که client و server تنها بتوانند یک request یا response را در آن واحد مبادله کنند.

در طول سال ها، تلاش های زیادی برای ساخت یک پروتکل لایه انتقال بهتر صورت گرفت که در انتها، پروتکل SPDY با هدف کاهش تاخیر (Latency) باز شدن صفحات و افزایش امنیت وب توسط گوگل معرفی شد. SPDY بخشی از مشکلات TCP را رفع کرد و بعدها برای HTTP-over-SPDY استفاده شد، پروتکلی که در انتها HTTP/2 نام گرفت. HTTP/2 با معرفی مفهوم HTTP stream تلاش کرد که این مشکل را حل کند. HTTP stream اجازه می داد که در یک لحظه چندین درخواست مختلف به صورت همزمان از طریق یک ارتباط TCP منتقل شوند. مشکل HTTP/2 این بود که بروز مشکل در ارسال تنها یکی از بسته های داده، بسته های داده دیگر را هم دچار مشکل می کرد.

 

http1.1 vs http2

 

SPDY تنها یک نسخه بهبود یافته از TCP بود. به مرور نتیجه گرفته شد که می توان قابلیت اعتماد بالای TCP و سرعت UDP را در قالب یک پروتکل جدید ترکیب کرد و به این ترتیب پروتکل QUIC یا “Quick UDP Internet Connections” معرفی شد. این پروتکل بهترین ویژگی های TCP و UDP را ترکیب کرد تا در نهایت یک پروتکل سریع و قابل اعتماد بسازد. HTTP-over-QUIC که نهایتا HTTP/3 نام گرفت، در لایه انتقال خود به جای پروتکل های TCP و SPDY از QUIC استفاده می کند.

http over QUIC

HTTP/3 با نسخه های قبلی HTTP تفاوت عمده ای دارد، چرا که از QUIC به جای TCP استفاده می کند و پشتیبانی از TLS هم به آن اضافه شده است. نتیجه کار، ترکیبی از تکنولوژی های مختلف است که در نهایت موجب افزایش سرعت باز شدن صفحات وب می شود. تفاوت عمده بین HTTP/3 و نسخه های قبلی آن در نحوه انتقال بسته های داده در اینترنت است. در صورتی که در HTTP/3 برای یکی از بسته ها مشکلی پیش بیاد، برنامه مورد استفاده می تواند درخواست کند که بسته گم شده دوباره ارسال شود و برخلاف HTTP/2 تاثیری بر روی دیگر بسته ها ندارد. پروتکل HTTP/3 تنها یک ارتباط ساخته و جریانی از داده ها مثل HTML و CSS و JavaScript و عکس ها و… را ارسال می کند.

فرآیند handshake اولیه سریع تر به افزایش سرعت کمک می کند. هنگام handshake، دو طرف پیام هایی برای شناسایی، تایید یکدیگر و برقراری رمزگذاری مبادله می کنند. در HTTP/3 پس از برقرای ارتباط، بسته ها بدون ترتیب مشخصی منتقل می شوند و سرعت ارتباط افزایش می یابد. هر بسته دارای نشانه شناسایی است که کمک می کند تا پس از رسیدن به مقصد مرتب شوند.

 

quic stack

 

نحوه دسترسی

پروتکل HTTP/3 بسیار جدید بوده و استفاده گسترده ای ندارد، اما با توجه به بهبودهای اضافه شده، پیش بینی می شود که استفاده از آن افزایش گسترده ای پیدا کند.

در صورتی که می خواهید از HTTP/3 استفاده کنید، Google Chrome از این پروتکل پشتیبانی می کند. برای فعال کردن این قابلیت، در قسمت آدرس مرورگر کروم عبارت chrome://flags را وارد کنید و در صفحه باز شده، مورد Experimental QUIC protocol را یافته و آن را Enable کنید. در نظر داشته باشید که این قابلیت هنوز نهایی نشده و ممکن است که فعال کردن آن باعث بروز مشکلاتی شود.

enable http-over-quic in chrome

مرورگر Firefox هم در نظر دارد که این قابلیت را اضافه کند، برای استفاده از HTTP/3 بر روی فایرفاکس لازم است که نسخه غیر نهایی Firefox Nightly را دانلود کنید.firefox nightly

[تعداد رای: 3 میانگین امتیاز: 5]