
HTTP مخفف پروتکل انتقال ابرمتن است. این پروتکل، پایه و اساس ارتباط دادهها برای وب جهانگستر است. با اینکه در حال حاضر دیگر از این پروتکل برای وبسایتها استفاده نمیشود اما به هر حال پروتکل مهمی است که باید بطور کامل آن را بشناسید. در ادامه این مقاله این مبحث را بطور کامل بررسی میکنیم.
پروتکل Http چیست؟
به زبان ساده، پروتکل http یک پروتکل کاربردی است که نحوه قالببندی و انتقال پیامها و اقداماتی را که سرورهای وب و مرورگرها باید در پاسخ به دستورات مختلف انجام دهند، تعریف میکند. این مجموعه قوانینی است که تبادل فایلها، مانند متن، تصاویر و سایر فایلهای چندرسانهای را در اینترنت کنترل میکند.
ویژگیهای کلیدی http
- مدل کلاینت-سرور: HTTP به عنوان یک پروتکل درخواست-پاسخ عمل میکند. یک کلاینت که معمولاً یک مرورگر وب درخواستی را به یک سرور که میزبان وبسایت است، ارسال میکند و سرور پاسخی را ارسال میکند.
- کلاینت (مرورگر): درخواست یک منبع مثلا یک صفحه وب را میدهد.
- سرور: منبع درخواستی یا پیام خطا را ارائه میدهد.
- بدون وضعیت: HTTP ذاتا بدون وضعیت است، به این معنی که هر درخواست از یک کلاینت به سرور مستقل است؛ سرور هیچ حافظه یا اطلاعاتی در مورد درخواستهای گذشته از آن کلاینت نگه نمیدارد. این سادگی، آن را سریع و مقیاسپذیر میکند، اما برای مدیریت جلسات کاربر که در آن وضعیت باید حفظ شود (مثلا پیگیری اقلام در سبد خرید)، به روشهای اضافی مانند کوکیها یا شناسههای جلسه نیاز دارد.
- استفاده از TCP/IP: پروتکل http برای انتقال قابل اعتماد دادهها از طریق اینترنت به مجموعه TCP/IP (پروتکل کنترل انتقال/پروتکل اینترنت) متکی است.
حتما بخوانید: گواهینامه SSL چیست؟
پروتکل Http چگونه کار میکند؟
HTTP یک چرخه درخواست-پاسخ است که هر بار که یک صفحه وب را بارگذاری میکنید، اتفاق میافتد. در اینجا فرآیند گام به گام آن آمده است:
چرخه درخواست-پاسخ HTTP کل فرآیند شامل یک کلاینت (مرورگر وب شما) و یک سرور (دستگاهی که وبسایت را میزبانی میکند) است.
1. برقراری اتصال
- تجزیه URL: شما یک URL مانند https://www.example.com/page.html را در مرورگر خود تایپ میکنید.
- جستجوی DNS: مرورگر ابتدا باید آدرس IP سرور را پیدا کند. از سیستم نام دامنه (DNS) برای ترجمه نام دامنه قابل خواندن توسط انسان (www.example.com) به یک آدرس IP (مثلاً 192.0.2.1) استفاده میکند.
- دست دادن TCP: مرورگر با استفاده از پروتکل کنترل انتقال (TCP) یک اتصال قابل اعتماد با سرور برقرار میکند. این مسئله شامل یک دست دادن سه طرفه (SYN، SYN-ACK، ACK) است تا اطمینان حاصل شود که هر دو طرف آماده برقراری ارتباط هستند.
2. درخواست
پس از ایمن شدن اتصال در صورت استفاده از HTTPS و برقراری آن، کلاینت یک درخواست HTTP به سرور ارسال میکند. یک درخواست سه بخش اصلی دارد:
- خط درخواست: روش و URL هدف را مشخص میکند.
- سربرگهای درخواست: اطلاعات تکمیلی در مورد مشتری و درخواست ارائه میدهد.
- درخواست بدنه: برای متدهایی که دادهها را به سرور ارسال میکنند استفاده میشود.
رایجترین متدها در HTTP عبارتند از:
- GET: بازیابی دادهها (مثلاً مشاهده یک صفحه).
- POST: ارسال دادهها برای پردازش (مثلاً ارسال فرم ورود).
- PUT: آپلود یا بهروزرسانی یک منبع.
- DELETE: حذف یک منبع.
۳. پاسخ
سرور درخواست را پردازش میکند، منبع درخواستی (page.html) را پیدا میکند و یک پاسخ HTTP ارسال میکند. یک پاسخ همچنین سه بخش اصلی دارد:
- خط وضعیت: شامل نسخه HTTP و یک کد وضعیت (یک عدد ۳ رقمی) است.
- هدرهای پاسخ: اطلاعات اضافی در مورد سرور و دادههای پاسخ ارائه میدهد.
- بدنه پاسخ: محتوای واقعی درخواست شده (HTML، تصویر، دادههای JSON و غیره).
کد وضعیت نتیجه درخواست را به کلاینت میگوید:
- 2xx (موفقیت): 200 OK (درخواست با موفقیت انجام شد).
- 3xx (هدایت): 301 Moved Permanently (منبع منتقل شده است).
- 4xx (خطای کلاینت): 404 Not Found (معروفترین مورد – منبع وجود ندارد).
- 5xx (خطای سرور): 500 Internal Server Error (سرور نتوانست درخواست را انجام دهد).
4. رندر کردن و بستن
- رندر کردن: مرورگر بدنه پاسخ (کد HTML) را دریافت میکند و شروع به رندر کردن صفحه وب میکند. اگر HTML به منابع دیگری مانند فایلهای CSS، جاوا اسکریپت یا تصاویر ارجاع دهد، مرورگر کل چرخه درخواست-پاسخ HTTP را برای هر یک از این منابع تکرار میکند.
- بستن اتصال: اتصال معمولا پس از اتمام انتقال داده، به خصوص در نسخههای قدیمیتر HTTP، بسته میشود. نسخههای مدرن مانند HTTP/1.1 و HTTP/2 امکان اتصالهای پایدار که به عنوان keep-alives شناخته میشوند را برای ارسال چندین درخواست و پاسخ از طریق یک اتصال فراهم میکنند و عملکرد را به طرز چشمگیری بهبود میبخشند.
کل این چرخه، از تایپ URL تا دیدن صفحه رندر شده، اغلب فقط چند میلیثانیه طول میکشد!
حتما بخوانید: فرق بين http و https چیست؟
روشهای درخواست در پروتکل http
متدهای HTTP با عملیاتهای پایه CRUD (ایجاد، خواندن، بهروزرسانی، حذف) که اغلب در طراحی پایگاه داده و برنامههای وب استفاده میشوند، مطابقت دارند:
1. GET (خواندن)
- هدف: رایجترین روش. برای درخواست داده از یک منبع مشخص استفاده میشود.
- ایمنی: ایمن در نظر گرفته میشود (نباید منبع را روی سرور تغییر دهد).
- کاربرد: بازیابی یک صفحه وب، یک تصویر یا یک قطعه داده خاص.
- مثال: بارگیری صفحه اصلی یک وبسایت.
2. POST (ایجاد)
- هدف: برای ارسال یک موجودیت به منبع مشخص استفاده میشود که اغلب باعث تغییر در وضعیت یا ایجاد یک منبع جدید در سرور میشود.
- ایمنی: ایمن نیست (وضعیت سرور را تغییر میدهد).
- کاربرد: ارسال فرم ورود، ارسال نظر یا آپلود فایل.
۳. PUT (بهروزرسانی/ایجاد)
- هدف: برای جایگزینی تمام نمایشهای فعلی منبع هدف با محتوای بار مفید استفاده میشود. میتوان از آن برای ایجاد منبع در صورت عدم وجود منبع با URI مشخص شده یا بهروزرسانی آن در صورت وجود استفاده کرد.
- ایمنی: ایمن نیست.
- کاربرد: بهروزرسانی کل یک سند یا نمایه کاربر.
۴. DELETE (حذف)
- هدف: برای حذف منبع مشخص شده استفاده میشود.
- ایمنی: ایمن نیست.
- کاربرد: حذف یک فایل، یک حساب کاربری یا یک رکورد پایگاه داده.
روشهای HTTP ثانویه
در حالی که روشهای CRUD بالا رایجترین هستند، این دو نیز بسیار رایج هستند:
5. HEAD
- هدف: تقریبا مشابه GET است، اما سرور نباید بدنه پیام را برگرداند.
- کاربرد: فقط برای بازیابی خط وضعیت و بخش هدر یک منبع استفاده میشود. این برای بررسی وجود منبع، مشاهده آخرین زمان تغییر یا بررسی طول محتوا قبل از دانلود کل محتوا مفید است.
6. گزینهها
- هدف: برای توصیف گزینههای ارتباطی برای منبع هدف استفاده میشود.
- کاربرد: یک کلاینت میتواند از سرور بپرسد که چه روشهای درخواستی (مانند GET، POST، DELETE و غیره) برای یک URL خاص در دسترس است.
حتما بخوانید: آموزش حل ارور Make Fewer HTTP requests در جیتی متریکس
ساختار Responseها و Requestها در Http
در این بخش ساختار درخواستهای HTTP و پاسخهای HTTP را توضیح میدهیم، که دو پیامی هستند که در هر ارتباط HTTP رد و بدل میشوند.
۱. ساختار یک درخواست HTTP
یک درخواست HTTP از کلاینت مثلا مرورگر شما به سرور ارسال میشود. معمولا از سه بخش اصلی تشکیل شده است.
- خط شروع: این اولین خط پیام است و خود درخواست را تعریف میکند. این خط سه عنصر دارد که با یک فاصله از هم جدا شدهاند:
- فعل HTTP (GET، POST، PUT و غیره) که نشان دهنده عملی است که باید انجام شود.
- هدف درخواست: URL یا مسیر منبعی که کلاینت میخواهد با آن تعامل داشته باشد (مثلاً /index.html یا /api/users/123).
- نسخه HTTP: نسخه پروتکل مورد استفاده (مثلاً HTTP/1.1 یا HTTP/2.0).
- مثال: GET /products/shoes HTTP/1.1
- سرصفحهها: این سرصفحهها پس از خط شروع قرار میگیرند و اطلاعات بیشتری در مورد درخواست، کلاینت و محتوای بدنه ارائه میدهند. آنها جفتهای کلیدی هستند که با علامت دونقطه از هم جدا میشوند و با یک خط خالی پایان مییابند.
- میزبان: نام دامنه سرور را مشخص میکند، برای HTTP/1.1 اجباری است (مثلاً میزبان: www.example.com).
- عامل کاربر: نرمافزار کلاینتی را که درخواست را انجام میدهد شناسایی میکند (مثلاً عامل کاربر: Mozilla/5.0…).
- پذیرش: انواع رسانههایی را که کلاینت میتواند پردازش کند مشخص میکند (مثلاً پذیرش: text/html، application/json).
- طول محتوا: در صورت وجود، اندازه بدنه درخواست را نشان میدهد.
- بدنه: این بخش اختیاری است. این بخش شامل دادههایی است که برای روشهایی مانند POST به سرور ارسال میشود. مثلا دادههای فرم، JSON یا یک فایل آپلود شده. درخواستهای GET معمولا بدنه ندارند.
۲. ساختار یک پاسخ HTTP
یک پاسخ HTTP در پاسخ به یک درخواست از سرور به کلاینت ارسال میشود. همچنین از سه بخش اصلی تشکیل شده است:
- خط شروع: این اولین خط پیام سرور است و حاوی نتیجه درخواست است. این خط دارای سه عنصر است:
- نسخه HTTP: نسخه پروتکل مورد استفاده (مثلاً HTTP/1.1).
- کد وضعیت: یک عدد صحیح سه رقمی که نتیجه درخواست را نشان میدهد.
- متن وضعیت: توضیحی مختصر و قابل خواندن توسط انسان از کد وضعیت (مثلاً OK، Not Found).
- مثال: HTTP/1.1 200 OK
- سرصفحهها: این سرصفحهها اطلاعاتی در مورد سرور و دادههایی که در بدنه پاسخ ارسال میشوند، ارائه میدهند.
- نوع محتوا: نوع رسانه محتوای موجود در بدنه را مشخص میکند (مثلاً، نوع محتوا: text/html; charset=UTF-8).
- طول محتوا: اندازه محتوای بدنه را بر حسب بایت نشان میدهد.
- سرور: نرمافزار مورد استفاده سرور را مشخص میکند (مثلاً سرور: Apache/2.4.1 (Unix)).
- تنظیم کوکی: برای ارسال کوکیها از سرور به کلاینت استفاده میشود.
- بدنه: این بخش نیز اختیاری است اما مهمترین بخش برای درخواستهای موفق است. این بخش شامل منبع واقعی درخواست شده توسط کلاینت است، مانند:
- کد HTML برای یک صفحه وب.
- دادههای تصویر.
- دادههای JSON یا XML برای فراخوانی API.
اگر درخواست ناموفق بود مثلا خطای ۴۰۴، بدنه ممکن است حاوی یک صفحه یا پیام خطای ساده باشد.
HTTP چه چیزهایی را میتواند کنترل کند؟
پروتکل انتقال ابرمتن (HTTP) همهکاره است. برخلاف نامش که نشان میدهد فقط روی «ابرمتن» تمرکز دارد، HTTP میتواند تقریبا هر نوع منبع دیجیتال و تعاملی را در وب مدیریت و کنترل کند. در اینجا خلاصهای از آنچه HTTP میتواند مدیریت کند، آورده شده است:
۱. انواع محتوای دیجیتال
HTTP یک پروتکل مستقل از محتوا است، به این معنی که میتواند هر نوع فایلی را که با نوع رسانه آن در سربرگ نوع محتوا در پاسخ مشخص شده است، منتقل کند.
- اسناد/متن
- تصاویر
- دادههای برنامه
- محتوای چند رسانهای
- فرمها/بارگذاری
به همین دلیل است که بارگذاری یک صفحه وب شامل دهها درخواست HTTP میشود: یکی برای HTML، یکی برای CSS، چندین درخواست برای تصاویر و دیگری برای جاوا اسکریپت.
۲. عملیات CRUD
متدهای درخواست HTTP به آن اجازه میدهند تا تمام عملیات اساسی مورد نیاز برای برنامههای وب مدرن و APIها را که اغلب از سبک معماری REST پیروی میکنند، مدیریت کند.
۳. کنترل ارتباطات و فراداده
HTTP فراتر از انتقال دادههای واقعی، ویژگیهای کنترلی حیاتی را از طریق هدرهای درخواست و پاسخ خود مدیریت میکند:
- ذخیرهسازی: هدرهایی مانند Cache-Control و Expires به کلاینت و پروکسیهای واسطه میگویند که چه مدت میتوانند یک منبع را به صورت محلی ذخیره کنند و به طور چشمگیری زمان بارگذاری را بهبود بخشیده و بار سرور را کاهش دهند.
- احراز هویت و امنیت: از احراز هویت اولیه از طریق هدرها پشتیبانی میکند و مهمتر از آن، اتصال رمزگذاری شده و تبادل گواهی برای HTTPS را تسهیل میکند.
- مدیریت جلسه: در حالی که HTTP بدون وضعیت است، هدرهای Set-Cookie و Cookie مکانیسم استانداردی هستند که برای مدیریت جلسات کاربر استفاده میکند. به عنوان مثال، نگه داشتن شما در حالت ورود یا ردیابی اقلام در سبد خرید.
- تغییر مسیر: کدهای وضعیت HTTP در محدوده 3xx به کلاینت میگویند که برای یافتن منبع درخواستی به URL دیگری برود.
- مذاکره محتوا: کلاینت میتواند هدرهایی را برای اعلام تنظیمات خود به سرور ارسال کند و سرور میتواند با مناسبترین قالب یا زبان پاسخ دهد.
- پروکسیها و تونلها: HTTP میتواند درخواستها را از طریق سرورهای میانی برای کارهایی مانند فیلتر کردن، ثبت وقایع، متعادلسازی بار یا تونلزنی پروتکلهای غیر HTTP مدیریت کند.
جمع بندی
HTTP پایه و اساس تبادل دادهها برای وب جهانی است که بر اساس مدل کلاینت-سرور عمل میکند، جایی که یک مرورگر درخواستها را ارسال میکند و یک سرور پاسخها را برمیگرداند. این پروتکل روشهایی مانند GET و POST را تعریف میکند تا به سرور بگوید چه اقدامی روی یک منبع لازم است و میتواند هر نوع محتوای دیجیتالی نه فقط ابرمتن مانند تصاویر، ویدیو و دادههای برنامه را منتقل کند. هر تعامل توسط یک ساختار پیام تعریف شده، از جمله یک کد وضعیت در پاسخ مانند 200 OK یا 404 Not Found برای نشان دادن نتیجه، اداره میشود. این پروتکل ذاتا بدون وضعیت است، به این معنی که هر درخواست مستقل است، اگرچه از ویژگیهایی مانند کوکیها برای حفظ وضعیت و جلسات کاربر استفاده میشود. ارتباطات وب مدرن در درجه اول از HTTPS استفاده میکند که لایهای از رمزگذاری TLS/SSL را برای ایمنسازی انتقال دادهها از طریق پروتکل اصلی HTTP اضافه میکند. در این مقاله اطلاعات کاملی درباره http گفتیم.
منابع:
developer.mozilla.org




