مرکز دانش IT |
HTTP/2
پروتکل انتقال ابرمتن نگارش ۲
HTTP/2 (در اصل به نام HTTP/2.0) یک بازنگری عمده بر روی پروتکل شبکه ای HTTP میباشد که در وب جهان گستر استفاده میگردد. پروتکل HTTP/2 از پروتکل تجربی SPDY، که توسط گوگل توسعه داده شده، مشتق شدهاست. HTTP/2 توسط کار گروه پروتکل انتقال ابر متن موسوم به httpbis (که در آن bis به معنی "دوم") است توسعه داده شدهاست که این کارگروه خود بخشی از نیروی ضربت مهندسی اینترنت است. HTTP/2 اولین نسخه جدید HTTP از HTTP 1.1 بود که در سال ۱۹۹۷ در RFC 2068 به صورت یک استاندارد درآمده است. کار گروه، HTTP/2 را در دسامبر ۲۰۱۴ جهت در نظر گرفته شدن به صورت یک استاندارد پیشنهادی به گروه راهبری مهندسی اینترنت ارائه کردند و این نهاد در هفده فوریه ۲۰۱۵ اجازه انتشار آن را به عنوان یک استاندارد پیشنهادی صادر نمود. مشخصات HTTP/2 تحت عنوان RFC 7540 در مارس ۲۰۱۵ منتشر گردیدند.
این استاندارد توسط مرورگرهای کروم، اپرا، فایرفاکس، اینترنت اکسپلورر ۱۱، سافاری ،آمازون سیلک و ادج پشتیبانی شدهاست. از پایان سال ۲۰۱۵، اکثر مرورگرهای اصلی پشتیبانی از HTTP/2 را به قابلیتهایشان افزودهاند.
بر اساس گزارش W3Techs، تا تاریخ ژوئن ۲۰۱۸، ۲۶٫۵ درصد از ۱۰ میلیون وب سایت از HTTP/2 پشتیبانی مینمودهاند.
اهداف
در منشور کارگروه چند هدف و موضوع قابل توجه ذکر شدهاست:
ایجاد یک مکانیسم گفتگو که به کلاینتها و سرورها اجازه میدهد تا انتخاب نمایند که از HTTP 1.1, 2.0 یا بهطور بالقوه پروتکلهای دیگر غیر ازHTTP استفاده نمایند.
فراهم کردن سطح بالایی از سازگاری با HTTP 1.1 (برای مثال با متدها، کدهای وضعیت ،Uriها و اغلب فیلدهای سرآیند).
کاهش زمان تأخیر به منظور بهبود سرعت لود صفحه در مرورگرهای وب با توجه به:فشرده سازی دادهها ی HTTP headers
HTTP/2 فشار سرور
خط لوله سازی درخواستها
رفع مشکل مسدودسازی سر خط در HTTP 1.x
تسهیم درخواستهای متعدد بر روی یک اتصال TCP
پشتیبانی از موارد استفاده عمومی موجود HTTP، مانند مرورگرهای وب دسکتاپ، مرورگرهای وب موبایل، رابطهای برنامهنویسی کاربردی وب، وب سرورها در مقیاسهای مختلف، پروکسی سرورها، پروکسی معکوس سرورها، فایروالها و شبکههای تحویل محتوا.
تفاوتها از HTTP 1.1
تغییرات پیشنهادی نیاز به هیچ گونه تغییراتی در چگونگی کارکرد برنامههای کاربردی وب موجود ندارند، اما برنامههای جدید میتوانند از ویژگیهای جدید برای افزایش سرعت استفاده کنند.
HTTP/2 بیشتر سینتکس سطح بالای HTTP 1.1، مانند متدها، کدهای وضعیت، فبلدهای سرآیند و Uri را به همان صورت حفظ کردهاست. آنچه جدید است این است که چگونه دادهها قاببندی شده و بین کلاینت و سرور انتقال داده شوند.
وب سایتهایی که کارآمد هستند، تعداد درخواستهای مورد نیاز برای رندر کردن کل صفحه را با عمل خلاصهسازی کد منبع (کاهش مقدار کد و بستهبندی قطعات کوچکتر از کد را در بستههای نرمافزاری، بدون کاهش توانایی عملکرد کد) مثلاً در مورد تصاویر و اسکریپتها، به حداقل میرسانند. اما خلاصهسازی کد منبع نه لزوماً مناسب و نه کارآمد است و ممکن است هنوز نیاز به اتصالات HTTP جداگانه ای برای دریافت صفحه و منابع خلاصهسازی شده داشته باشد. HTTP/2 به سرور اجازه میدهد تا محتوا را «فشار» دهد، این کار سبب میشود که داده لازم برای پاسخ به مواردی که پرسوجوها بیشتر از آنچه کلاینت حقیقتاً درخواست کرده هستند، فراهم گردد. این کار به سرور اجازه میدهد تا دادههایی را که میداند یک مرورگر وب برای ارائه یک صفحه وب به آنها نیاز خواهد داشت، بدون انتظار برای اینکه مرورگر به بررسی پاسخ اولیه بپردازد و بدون سربار اضافی برای یک چرخه درخواست اضافه تر، برای آن تأمین نماید.
افزون بر این، بهبودهای عملکرد دیگری هم در اولین پیشنویس از HTTP/2 (که یک کپی از SPDY بود) از طریق تسهیم درخواستها و پاسخها به منظور جلوگیری از مشکل مسدودسازی سر خط در HTTP 1 (حتی زمانی که خط لوله سازی HTTP استفاده شدهاست)، فشرده سازی سرآیند و اولویت بندی درخواستها حاصل شدهاست.HTTP/2 دیگر از مکانیسم انتقال رمزگذاری تکه بندی شده HTTP 1.1 را پشتیبانی نمیکند و به جای آن مکانیسم کارآمدتر خودش را برای جریان دهی دادهها استفاده میکند.
پیدایش از روی SPDY و تفاوتهای بعدی با آن
SPDY (تلفظ مانند "اسپیدی") بود یک پروتکل جایگزین قبلی برای HTTP بود که توسط یک پروژه تحقیقاتی پیشگام توسط گوگل توسعه یافته بود.[۱۱] SPDY در درجه اول بر کاهش زمان تأخیر متمرکز شده بود، از همان خط لوله TCP استفاده میکرد، اما به منظور دستیابی به این کاهش از پروتکلهای متفاوتی استفاده مینمود. پایه ایترین تغییرات اعمال شده بر روی HTTP 1.1 برای ایجاد SPDY شامل: «خط لوله سازی صحیح درخواستها بدون محدودیتهای FIFO، مکانیسم قاب بندی پیامها برای ساده سازی توسعه کلاینت و سرور، فشرده سازی اجباری (شامل سرآیندها)، زمان بندی اولویتها و حتی ارتباط دوسویه» بودند.[۱۲]
کارگروه httpbis پروتکل Google SPDY، پیشنهاد پروتکل مایکروسافتی HTTP Speed+Mobility (بر مبنایSPDY), و ارتقا شبکه-پسند HTTP را مورد تحقیق قرار دادند. در ژوئیه ۲۰۱۲ فیس بوک برای هر کدام از این پیشنهادها بازخوردی را ارائه کرد و توصیه نمود که HTTP/2 بر اساس SPDY بنا شود. پیشنویس اولیه HTTP/2 در ماه نوامبر سال ۲۰۱۲ منتشر شد و بر مبنای یک کپی مستقیم از SPDY تهیه شده بود.
بزرگترین تفاوت میان HTTP/1.1 و SPDY این بود که هر عمل کاربر در SPDY دارای یک "شناسه جریان " بود، که این به معنی وجود تنها یک کانال اتصال TCP از کاربر به سرور است. SPDY درخواستها را به دو دسته "کنترل" یا "داده " با استفاده از " پروتکل باینری آسان جهت پارسه کردن با دو نوع قاب" تقسیم میکرد. SPDY بهبود چشمگیری را نسبت به HTTP به نمایش گذاشت به طوری که سرعت بارگذاری صفحات بین ۱۱٫۸۱٪ تا ۴۷٫۷٪ سریعتر شده بود.
HTTP/2 از SPDY به عنوان یک سکوی پرش استفاده کرد. در میان بسیاری از تفاوتهای مفصل بین پروتکلها، قابل توجهترین تفاوت این است که HTTP/2، به جای استفاده از فشرده سازی پویای مبتنی بر جریان در SPDY، از یک الگوریتم فشرده سازی سرآیند ثابت بر مبنای کد هافمن استفاده میکند. این امر به کاهش خطر بالقوه حملات فشرده سازی اوراکل در پروتکل، مانند حملات CRIME کمک مینماید.
در فوریه ۹, ۲۰۱۵ گوگل اعلام کرد قصد دارد پشتیبانی از SPDY را در مرورگر کروم به نفع پشتیبانی از HTTP/2 حذف نماید؛ که این حذف از مرورگر کروم ۵۱ عملی گردید.
رمزگذاری
HTTP/2 برای هر دو HTTP Uri (یعنی بدون رمزگذاری) و HTTPS Uri (بر روی TLS یا استفاده از توسعه ALPN که در آن TLS 1.2 یا جدیدتر مورد نیاز است) تعریف شدهاست.
اگر چه خود استاندارد نیاز به استفاده از رمزگذاری ندارد، همه پیادهسازیهای اصلی کلاینت (فایرفاکس، کروم، سافاری، اوپرا، اینترنت اکسپلورر، ادج) اعلام کردهاند که آنها تنها از HTTP/2 بر روی TLS پشتیبانی میکنند که باعث میشود رمزگذاری عملاً الزامی باشد.