تاریخچه HTTP در کمتر از 5 دقیقه – انجمن DEV

پروتکل انتقال ابرمتن (HTTP) پایه و اساس ارتباطات داده در شبکه جهانی وب است. HTTP از زمان آغاز به کار چندین بار برای بهبود عملکرد، امنیت و کارایی خود انجام داده است. در این پست وبلاگ، به بررسی تاریخچه و ویژگیهای کلیدی هر نسخه HTTP، از HTTP/0.9 تا آخرین HTTP/3، با تمرکز بر هدرها و فناوریهای جدید معرفی شده در هر نسخه خواهیم پرداخت.
HTTP/0.9: آغاز
HTTP/0.9 که به عنوان “پروتکل یک خطی” نیز شناخته می شود، اولین نسخه HTTP بود که توسط تیم برنرز لی در سال 1991 معرفی شد. این یک پروتکل ساده مبتنی بر متن بود که به مشتریان اجازه می داد با استفاده از یک خط، اسناد را از سرورها درخواست کنند. فرمان
مشتری درخواستی را در قالب “GET” ارسال می کند و سرور با سند درخواستی پاسخ می دهد. هیچ هدر یا ابرداده ای وجود نداشت و اتصال بلافاصله پس از انتقال بسته می شد. در حالی که HTTP/0.9 بسیار محدود بود، زمینه را برای نسخه های آینده پروتکل فراهم کرد.
HTTP/1.0: گسترش عملکرد
HTTP/1.0 که به طور رسمی با نام RFC 1945 در سال 1996 منتشر شد، HTTP/0.9 را با معرفی فرمت درخواست و پاسخ قوی تر گسترش داد. HTTP/1.0 پشتیبانی از سرصفحههای درخواست و پاسخ را اضافه کرد که به مشتریان و سرورها اجازه میداد تا ابردادههای مربوط به درخواست و منبع در حال انتقال را مبادله کنند. برخی از هدرهای کلیدی معرفی شده در HTTP/1.0 عبارتند از:
نوع محتوا: نوع رسانه منبع در حال انتقال را مشخص می کند.
طول محتوا: اندازه منبع را بر حسب بایت نشان می دهد.
آخرین تغییر: نشان دهنده تاریخ و ساعت آخرین تغییر منبع است.
منقضی می شود: تاریخ و زمانی را ارائه می دهد که پس از آن منبع قدیمی در نظر گرفته می شود.
این هدرها ویژگی های جدیدی مانند ذخیره سازی، مذاکره محتوا و درخواست های مشروط را فعال می کردند. با این حال، HTTP/1.0 همچنان دارای محدودیتهای مهمی بود، مانند باز کردن یک اتصال TCP جدید برای هر درخواست، که تأثیر منفی بر عملکرد داشت.
HTTP/1.1: بهبود عملکرد و کارایی
HTTP/1.1، ابتدا با عنوان RFC 2068 در سال 1997 منتشر شد و بعداً در RFC 2616 (1999) و RFC 7230-7235 (2014) به روز شد، با هدف رسیدگی به مشکلات عملکرد موجود در HTTP/1.0. قابل توجه ترین پیشرفت، معرفی اتصالات مداوم بود، که اجازه می داد چندین درخواست و پاسخ از طریق یک اتصال TCP ارسال شود و هزینه های ایجاد و بسته شدن اتصالات را کاهش دهد. HTTP/1.1 همچنین ویژگی هایی مانند خط لوله، رمزگذاری انتقال تکه تکه و مکانیسم های ذخیره اضافی را معرفی کرد.
برخی از هدرهای مهم معرفی شده در HTTP/1.1 عبارتند از:
میزبان: نام دامنه و شماره پورت سرور میزبان منبع درخواستی را مشخص می کند.
Cache-Control: به کلاینتها و سرورها اجازه میدهد تا خطمشیهای کش را مشخص کنند، مانند حداکثر سن یا بدون کش.
ETag: یک شناسه منحصر به فرد برای یک نسخه خاص از یک منبع ارائه می دهد که امکان درخواست های شرطی و ذخیره کارآمدتر را فراهم می کند.
ارتباط: نشان می دهد که آیا اتصال باید برای درخواست های بیشتر باز بماند یا بعد از درخواست فعلی بسته شود.
HTTP/1.1 همچنین با معرفی WebSockets و Server-Sent Events (SSE) راه را برای ارتباط بلادرنگ هموار کرد و ارتباط دو طرفه کارآمدی را بین کلاینتها و سرورها فراهم کرد.
HTTP/2: یک جهش بزرگ به جلو
HTTP/2 که در سال 2015 به عنوان RFC 7540 استاندارد شد، یک تغییر اساسی در نحوه ارتباط HTTP از طریق شبکه ایجاد کرد. به جای استفاده از متن ساده، HTTP/2 از یک لایه قاب بندی باینری استفاده کرد که کارآمدتر و کمتر مستعد خطا شد.
یکی از مهم ترین پیشرفت ها، معرفی مالتی پلکس بود، که اجازه می داد چندین درخواست و پاسخ به طور همزمان از طریق یک اتصال ارسال شوند. این مشکل انسداد سر خط موجود در HTTP/1.1 را حذف کرد، جایی که یک درخواست کند میتواند درخواستهای بعدی را مسدود کند.
HTTP/2 همچنین فشار سرور را معرفی کرد، ویژگیای که سرورها را قادر میسازد تا به طور فعال منابع را به کش مشتری ارسال کنند و درخواستهای آینده را پیشبینی کنند. علاوه بر این، HTTP/2 فشردهسازی هدر را با استفاده از HPACK ارائه میدهد که هزینه ارسال دادههای اضافی هدر را کاهش میدهد.
برخی از پیشرفت ها در HTTP/2 عبارتند از:
اولویت بندی جریان: مشتریان را قادر می سازد اولویت درخواست های متعدد را مشخص کنند و به سرورها امکان می دهد تحویل منابع را بهینه کنند.
ALPN (مذاکره پروتکل لایه کاربردی): به کلاینتها و سرورها اجازه میدهد تا در هنگام دست دادن TLS با نسخه خاص HTTP مذاکره کنند و زمان برقراری اتصال را بهبود بخشد.
HTTP/3: پذیرش QUIC
HTTP/3 که به عنوان یک پروتکل آزمایشی به نام QUIC (اتصالات اینترنت UDP سریع) در گوگل آغاز شد، به طور رسمی توسط IETF در سال 2021 استاندارد شد. مهم ترین تغییر در HTTP/3 تغییر استفاده از TCP به عنوان پروتکل لایه انتقال به QUIC، که به جای آن از پروتکل Datagram کاربر (UDP) استفاده می کند. این انتقال با کاهش تعداد رفت و برگشت های مورد نیاز در طول فرآیند دست دادن، زمان تأخیر و برقراری اتصال را بهبود می بخشد.
QUIC همچنین رمزگذاری داخلی را معرفی می کند که به طور پیش فرض آن را ایمن تر می کند. یکی دیگر از ویژگی های قابل توجه، مدیریت بهبود یافته از دست دادن بسته ها است که به ویژه برای کاربرانی که در شبکه های غیرقابل اعتماد هستند یا با تاخیر بالا مواجه هستند مفید است. QUIC با استفاده از یک مکانیسم بازیابی تلفات کارآمدتر و اجازه دادن به جریانهای مستقل، تضمین میکند که از دست دادن بسته در یک جریان بر عملکرد جریانهای دیگر تأثیر نمیگذارد.
HTTP/3 همچنین ویژگیهای عملکرد HTTP/2 مانند مالتی پلکس کردن، فشردهسازی هدر و فشار سرور را حفظ میکند. با این حال، به دلیل تفاوت های اساسی بین TCP و UDP، برخی تنظیمات مورد نیاز بود. به عنوان مثال، فشرده سازی HPACK با QPACK جایگزین شد، یک طرح فشرده سازی جدید که به طور خاص برای ویژگی های منحصر به فرد QUIC طراحی شده است.