پروتکل HTTP مخفف Hypertext Transfer Protocol یا «پروتکل انتقال اَبَرمتن» است و یکی از پروتکلهای اصلی اینترنت است که مشخص میکند دادهها چگونه میان کلاینت و سرور در وب ردوبدل شوند. این پروتکل که پایه اصلی انتقال داده در وب است، امکان ارتباط میان مرورگرهای وب و وبسرورها را فراهم میکند. همچنین، HTTP قواعد درخواست و تحویل داده میان سیستمها را نیز تعریف میکند.
باید دقت داشت که پروتکل HTTP یک پروتکل لایه کاربرد (Application Layer) در مدل OSI است که مرورگرها برای انتقال متن، تصویر و محتوای چندرسانهای در سیستمهای توزیعشده مبتنی بر وب از آن استفاده میکنند.
فهرست مطالب:
ویژگیهای پروتکل HTTP
HTTP یک سازوکار استاندارد برای ارتباط فراهم میکند تا کلاینتها و سرورها بتوانند منابع وب را بهشکلی هماهنگ با یکدیگر مبادله کنند. مهمترین ویژگیهای HTTP عبارتند از:
- بدون حالت (Stateless): هر درخواست HTTP مستقل از درخواستهای دیگر است و خود پروتکل الزام نمیکند که سرور اطلاعات تعاملهای قبلی را برای درخواست بعدی نگه دارد.
- مدل Client-Server: کلاینت منابع موردنیاز خود را درخواست میکند و سرور به این درخواستها پاسخ میدهد.
- Request-Response: ارتباط HTTP بر چرخه «درخواست و پاسخ» استوار است.
- متدهای مختلف: متدهایی مانند
GETوPOSTوPUTوDELETEنوع عملیات موردنظر روی یک منبع را مشخص میکنند. - قابلیت توسعه: هدرها و دیگر نقاط توسعه HTTP اجازه میدهند قابلیتهای جدید بدون تغییر معنای اصلی پروتکل به آن اضافه شوند.
تاریخچه HTTP
HTTP از یک پروتکل ساده برای انتقال اسناد به یکی از استانداردهای اصلی ارتباط در وب تبدیل شده است. توسعه اولیه پروتکل HTTP به همراه زبان HTML و فناوریهای مرتبط با وبسرور و مرورگرها را به Tim Berners-Lee و تیمش در آزمایشگاه CERN نسبت دادهاند. HTTP اولیه در آغاز دهه ۱۹۹۰ برای درخواست اسناد ابرمتن طراحی شد.
نسخه 1.0 این پروتکل یا همان HTTP/1.0 در سال ۱۹۹۶ و در قالب استاندارد RFC 1945 منتشر شد. سال بعد، استاندارد RFC 2068 اقدام به معرفی HTTP/1.1 نمود که در سال ۱۹۹۹، این نسخه مورد بازنگری قرار گرفت. HTTP/2 در سال ۲۰۱۵ با RFC 7540 استاندارد شد و نهایتاً HTTP/3 که مبتنی بر QUIC است در سال ۲۰۲۲ و در قالب استاندارد RFC 9114 منتشر شد.
استاندارد فعلی HTTP Semantics توضیح میدهد که HTTP از سال ۱۹۹۰ پروتکل اصلی انتقال اطلاعات در WWW بوده است. این استاندارد همچنین تأکید میکند که نسخههای اصلی HTTP صرفاً یکدیگر را «منسوخ» نکردهاند؛ هرکدام با توجه به شرایط استفاده مزایا و محدودیتهای خود را دارند.
تفاوت نسخههای مختلف HTTP
یکی از نکاتی که برای درک HTTP امروزی اهمیت دارد، تفاوت میان معنای HTTP و نحوه انتقال پیامها در نسخههای مختلف آن است. متدهایی مانند GET و POST و مفاهیمی مانند کدهای وضعیت، در نسخههای اصلی HTTP معنای مشترکی دارند، اما شیوه انتقال پیام متفاوت است. HTTP/1.1 از قالب پیام مبتنی بر متن استفاده میکند. HTTP/2 یک لایه framing باینری و قابلیت multiplexing را اضافه کرد تا چند جریان HTTP بتوانند به شکل کارآمدتری روی یک اتصال مدیریت شوند.
HTTP/3 همان معناشناسی اصلی HTTP را روی QUIC اجرا میکند. QUIC نیز قابلیتهایی مانند multiplexing جریانها و کنترل جریان در سطح هر stream را فراهم میکند. HTTP/3 به QUIC متکی است و QUIC برای برقراری امنیت ارتباط از TLS 1.3 یا نسخههای بعدی آن در handshake خود استفاده میکند.
متدهای پروتکل HTTP
متدهای پروتکل HTTP مشخص میکنند کلاینت میخواهد چه عملیاتی روی منبعی که سرور ارائه میکند انجام دهد.
| متد | کاربرد |
|---|---|
| GET | دریافت یک منبع یا داده بدون درخواست برای تغییر آن |
| POST | ارسال داده برای پردازش؛ برای مثال ایجاد یک منبع جدید |
| PUT | ایجاد یا جایگزینی کامل یک منبع |
| PATCH | اعمال تغییرات جزئی روی یک منبع |
| DELETE | درخواست حذف یک منبع |
| HEAD | مشابه GET است، اما محتوای پاسخ را دریافت نمیکند و برای دریافت اطلاعات پاسخ کاربرد دارد |
| OPTIONS | دریافت گزینهها و قابلیتهای ارتباطی موجود برای منبع |
| TRACE | بازتاب درخواست برای اهداف تشخیصی؛ استفاده از آن محدود است و میتواند ملاحظات امنیتی داشته باشد |
| CONNECT | ایجاد یک تونل ارتباطی؛ معمولاً در ارتباط با پراکسیها استفاده میشود |
معنا و رفتار متدهای اصلی HTTP در استاندارد HTTP Semantics تعریف شده است.
درخواست و پاسخ در پروتکل HTTP
HTTP از مدل Request-Response یا همان درخواست و پاسخ استفاده میکند. بهطور ساده، کلاینت درخواستی میفرستد و سرور پس از پردازش آن، پاسخی برمیگرداند. فرآیند معمول به این شکل است:
- کلاینت درخواست را ارسال میکند: درخواست میتواند شامل متد، آدرس منبع، هدرها و در صورت نیاز محتوا یا بدنه درخواست باشد.
- سرور درخواست را پردازش میکند: سرور درخواست را بررسی کرده و عملیات لازم را انجام میدهد.
- سرور پاسخ میدهد: پاسخ معمولاً شامل کد وضعیت، هدرها و در صورت نیاز محتوا است.
- کلاینت پاسخ را پردازش میکند: مرورگر یا نرمافزار کلاینت، داده دریافتشده را نمایش میدهد یا از آن استفاده میکند.
برای مثال، یک صفحه وب معمولاً فقط یک فایل نیست. مرورگر ممکن است ابتدا سند HTML را دریافت کند و سپس برای CSS، تصاویر، جاوا اسکریپت و سایر منابع درخواستهای جداگانهای ارسال کند.
چرخه درخواست در HTTP
وقتی یک صفحه وب را باز میکنید، مرورگر ممکن است انواع مختلفی از منابع را از سرور درخواست کند.
| منبع درخواستی | نوع منبع | پاسخ سرور |
|---|---|---|
| صفحه HTML | HTML | سرور محتوای HTML را ارسال میکند |
| صفحه استایلها | CSS | سرور فایل CSS را ارسال میکند |
| یک یا چند تصویر JPG | تصویر | سرور تصویر JPG را ارسال میکند |
| کد جاوا اسکریپت | جاوا اسکریپت | سرور فایل JS را ارسال میکند |
| داده XML یا JSON | داده | سرور داده XML یا JSON را ارسال میکند |
در این فرآیند:
- منبع درخواستی: محتوایی را مشخص میکند که کلاینت درخواست کرده است؛ مانند HTML یا CSS یا تصویر و …
- نوع منبع: فرمت محتوای موردنظر را مشخص میکند؛ مانند HTML یا CSS یا تصویر و JS یا JSON یا XML.
- پاسخ سرور: سرور فایل یا داده متناسب با درخواست را برمیگرداند.
دقت کنید که منظور از «چرخه درخواست HTTP» در اینجا این است که مرورگر برای منابع مختلف صفحه درخواست ارسال میکند و سرور فایل یا داده مربوط به هر درخواست را در پاسخ برمیگرداند.
اجزای درخواست و پاسخ در HTTP
| مفهوم | توضیح |
|---|---|
| HTTP Request Headers | مجموعهای از فیلدهای نام/مقدار که اطلاعات و متادیتای مربوط به درخواست را منتقل میکنند |
| HTTP Request Body | محتوایی که همراه درخواست برای سرور فرستاده میشود؛ مانند داده فرم یا محتوای JSON |
| HTTP Response | پاسخ سرور به درخواست که شامل کد وضعیت، هدرها و در صورت نیاز محتوا است |
| HTTP Status Codes | کدهای سهرقمی نتیجه درخواست: 1xx اطلاعاتی، 2xx موفقیت، 3xx تغییر مسیر، 4xx خطای سمت کلاینت و 5xx خطای سمت سرور |
| HTTP Response Headers | متادیتای پاسخ؛ برای مثال اطلاعاتی درباره نوع محتوا یا کنترل Cache |
| HTTP Response Body | محتوای واقعی پاسخ، مانند HTML یا JSON و تصویر یا سایر دادهها |
یک نمونه ساده از درخواست و پاسخ
برای ملموستر شدن ساختار HTTP، یک درخواست ساده در HTTP/1.1 میتواند به این شکل باشد:
GET /index.html HTTP/1.1
Host: example.com
Accept: text/html
و پاسخ سرور ممکن است مشابه نمونه زیر باشد:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
<html>
...
</html>
در HTTP/1.1، پیام از یک خط آغازین، مجموعهای از فیلدهای هدر، یک خط خالی و در صورت وجود، بدنه پیام یا Message Body تشکیل میشود. این ساختار در RFC 9112 تعریف شده است.
کدهای وضعیت HTTP
کد وضعیت (HTTP Status Code) به کلاینت میگوید نتیجه پردازش درخواست چه بوده است که پنج گروه اصلی برای آن وجود دارد:
| گروه | مفهوم | نمونه |
|---|---|---|
| 1xx | پاسخ اطلاعاتی | 100 Continue |
| 2xx | درخواست با موفقیت پردازش شده است | 200 OK |
| 3xx | برای تکمیل درخواست، تغییر مسیر یا اقدام دیگری مطرح است | 301 Moved Permanently |
| 4xx | درخواست با خطایی مرتبط با سمت کلاینت مواجه شده است | 404 Not Found |
| 5xx | سرور هنگام انجام یک درخواست معتبر با خطا مواجه شده است | 500 Internal Server Error |
کد وضعیت بخشی از معنای پاسخ HTTP است و تعریف رسمی دستههای کد وضعیت در استاندارد HTTP Semantics قرار دارد.
تفاوت HTTP و HTTPS
HTTP و HTTPS دو اسکیم مختلف URI مرتبط با HTTP هستند. در یک ارتباط HTTPS، ارتباط HTTP بهشکل امن برقرار میشود تا محرمانگی (Confidentiality) و یکپارچگی (Integrity) دادهها تأمین و هویت سرور برای کلاینت احراز شود. استاندارد RFC 9110 این ویژگیها را بخشی از تعریف ارتباط امن برای URIهای https میداند. به همین دلیل، عبارت قدیمی «HTTPS یعنی HTTP روی SSL» دیگر توصیف مناسبی برای فناوریهای امروزی نیست. برای نمونه، HTTP/3 از QUIC استفاده میکند و امنیت QUIC با TLS 1.3 یکپارچه شده است.
بهطور خلاصه، ارسال اطلاعات حساس از طریق HTTP رمزنگارینشده میتواند داده را در مسیر ارتباط در معرض مشاهده یا دستکاری قرار دهد؛ برای وبسایتهای واقعی، باید از ارتباط امن HTTPS استفاده شود.
سازوکار کش در HTTP
یکی از قابلیتهای مهم پروتکل HTTP، قابلیت HTTP Caching است. کش میتواند پاسخ قبلی را ذخیره کند و در صورت مجاز بودن، برای درخواست بعدی دوباره از آن استفاده کند. این کار میتواند زمان پاسخ و مصرف پهنای باند شبکه را کاهش دهد. رفتار کش از طریق هدرهایی مانند Cache-Control کنترل میشود. برای مثال، یک پاسخ تازه (Fresh) ممکن است بدون مراجعه مجدد به سرور منبع از کش ارائه شود. اگر پاسخ دیگر تازه نباشد، در شرایط مناسب میتوان اعتبار آن را دوباره با سرور بررسی کرد.
این قابلیت یکی از دلایلی است که HTTP در عمل بسیار فراتر از یک چرخه ساده «درخواست و دریافت فایل» عمل میکند.
مزایای پروتکل HTTP
HTTP مزایای متعددی دارد که میتوان به موارد زیر اشاره کرد:
- مستقل از پلتفرم: HTTP به یک سیستم عامل خاص محدود نیست.
- سازگاری گسترده: در مرورگرها، وبسرورها، APIها، پراکسیها و زیرساختهای مختلف وب قابل استفاده است.
- قابلیت توسعه: هدرها و سازوکارهای توسعه، امکان افزودن قابلیتهای جدید را فراهم میکنند.
- مدل ارتباطی ساده و عمومی: مدل Request-Response رابط مشترکی برای تعامل با منابع مختلف ایجاد میکند.
- پشتیبانی از کش: ذخیره و استفاده مجدد از پاسخها میتواند latency و مصرف پهنای باند را کاهش دهد.
- امکان ارتباط امن: HTTP میتواند از طریق HTTPS با محافظت رمزنگاریشده استفاده شود.
معایب و محدودیتهای HTTP
HTTP در کنار همه مزایا و کاربردهایش، محدودیتهایی نیز دارد:
- HTTP بدون رمزنگاری امن نیست: اطلاعاتی که از طریق ارتباط HTTP عادی منتقل میشوند، حفاظت محرمانگی و یکپارچگی HTTPS را ندارند.
- محدودیتهای نسخههای قدیمیتر: HTTP/1.1 برای مدیریت تعداد زیادی درخواست همزمان محدودیتهایی دارد که نسخههای جدیدتر با روشهایی مانند multiplexing بهبودشان دادهاند.
- Stateless بودن: برنامههایی که نیاز دارند وضعیت کاربر را میان درخواستها حفظ کنند، باید از سازوکارهای دیگری برای مدیریت آن استفاده کنند.
- پیچیدگی عملکرد واقعی وب: عملکرد HTTP به عواملی مانند نسخه پروتکل، کشینگ، شبکه، TLS، سرور، پراکسیها و الگوی درخواستها وابسته است؛ بنابراین نمیتوان HTTP را بهطور کلی «سریع» یا «کند» توصیف کرد.
سوالات متداول
-
پروتکل HTTP چیست و چه کاربردی دارد؟
HTTP مخفف Hypertext Transfer Protocol است و برای تبادل داده میان کلاینت و سرور در وب استفاده میشود. وقتی صفحهای را در مرورگر باز میکنید، مرورگر با ارسال درخواست HTTP منابعی مانند HTML و CSS یا تصاویر و دادههای API را از سرور دریافت میکند.
-
تفاوت HTTP و HTTPS چیست؟
هر دو برای ارتباط در وب استفاده میشوند، اما HTTPS ارتباط HTTP را به شکل امن برقرار میکند و از رمزنگاری برای محافظت از دادهها در مسیر انتقال بهره میبرد. به همین دلیل، برای وبسایتهای واقعی و بهخصوص انتقال اطلاعات حساس باید از HTTPS استفاده شود.
-
مهمترین متدهای HTTP کداماند؟
متدهای پرکاربرد HTTP شامل GET برای دریافت داده، POST برای ارسال یا پردازش داده، PUT برای ایجاد یا جایگزینی یک منبع، PATCH برای اعمال تغییرات جزئی و DELETE برای درخواست حذف یک منبع هستند. متدهایی مانند HEAD و OPTIONS و CONNECT نیز کاربردهای تخصصیتری دارند.
-
کدهای وضعیت HTTP چه معنایی دارند؟
کدهای وضعیت HTTP نتیجه پردازش درخواست را مشخص میکند. برای مثال، 200 معمولاً نشاندهنده موفقیت درخواست، 404 نشاندهنده پیدا نشدن منبع و 500 نشاندهنده بروز خطا در سمت سرور است. کدهای HTTP به پنج گروه اصلی 1xx تا 5xx تقسیم میشوند.
-
تفاوت نسخههای مختلف HTTP چیست؟
این نسخهها معناشناسی اصلی HTTP، مانند متدها و کدهای وضعیت، را حفظ میکنند اما در شیوه انتقال پیامها تفاوت دارند. HTTP/1.1 از قالب پیام مبتنی بر متن استفاده میکند، HTTP/2 از framing باینری و multiplexing بهره میبرد و HTTP/3، پروتکل HTTP را روی پروتکل QUIC اجرا میکند.