HTTP چیست؟
هر بار که وارد یک وبسایت میشوید، روی لینکی کلیک میکنید، مقالهای را مطالعه میکنید یا اطلاعاتی را از یک API دریافت میکنید، ارتباطی بین مرورگر شما و سرور وبسایت برقرار میشود.
این ارتباط بر اساس مجموعهای از قوانین انجام میشود که HTTP (Hypertext Transfer Protocol) نام دارد.
HTTP یکی از مهمترین پروتکلهای اینترنت است و مشخص میکند مرورگر و سرور چگونه درخواستها و پاسخها را با یکدیگر ردوبدل کنند.
به زبان ساده، HTTP زبان مشترکی است که مرورگرها و وبسرورها برای برقراری ارتباط از آن استفاده میکنند.
چرا HTTP به وجود آمد؟
تصور کنید هر مرورگر و هر وبسرور روش مخصوص خود را برای ارسال اطلاعات داشت.
در چنین شرایطی ممکن بود یک مرورگر فقط با بعضی سرورها کار کند و نتواند صفحات سایر وبسایتها را نمایش دهد.
HTTP این مشکل را حل کرد و یک استاندارد مشترک برای ارتباط بین مرورگرها و وبسرورها به وجود آورد.
به همین دلیل، امروزه تقریباً تمام وبسایتهای جهان از HTTP یا نسخه امن آن یعنی HTTPS استفاده میکنند.
یک مثال ساده
فرض کنید وارد یک رستوران میشوید.
شما سفارش غذا را به گارسون میدهید، گارسون سفارش را به آشپز منتقل میکند و پس از آماده شدن غذا، آن را برای شما میآورد.
در این مثال:
- شما همان مرورگر (Browser) هستید.
- گارسون نقش HTTP را در انتقال پیامها ایفا میکند.
- آشپز همان وبسرور است.
- غذای آمادهشده همان پاسخ (Response) محسوب میشود.
HTTP تعیین میکند سفارش چگونه ارسال شود و پاسخ چگونه به مرورگر بازگردد.
HTTP چگونه کار میکند؟
هر ارتباط HTTP معمولاً از دو بخش اصلی تشکیل میشود:
- درخواست (Request)
- پاسخ (Response)
ابتدا مرورگر یا یک برنامه درخواست خود را به سرور ارسال میکند.
سپس سرور درخواست را بررسی میکند، عملیات لازم را انجام میدهد و پاسخ مناسبی را برمیگرداند.
این فرآیند ممکن است تنها در چند میلیثانیه انجام شود.
یک مثال واقعی؛ باز کردن صفحه اصلی یک وبسایت
فرض کنید آدرس یک وبسایت را در مرورگر وارد میکنید.
در پشت صحنه معمولاً مراحل زیر اتفاق میافتد:
- مرورگر یک Request به سرور ارسال میکند.
- سرور درخواست را دریافت میکند.
- در صورت نیاز، اطلاعات از دیتابیس خوانده میشوند.
- سرور صفحه موردنظر را آماده میکند.
- یک Response برای مرورگر ارسال میشود.
- مرورگر صفحه را نمایش میدهد.
تمام این مراحل بر اساس قوانین پروتکل HTTP انجام میشوند.
Request چیست؟
Request یا درخواست، پیامی است که مرورگر یا یک نرمافزار برای سرور ارسال میکند.
در این پیام مشخص میشود که کلاینت دقیقاً چه چیزی میخواهد.
برای مثال:
- نمایش صفحه اصلی سایت
- دریافت اطلاعات یک محصول
- ورود به حساب کاربری
- ثبت سفارش جدید
همه این عملیات با ارسال یک Request آغاز میشوند.
Response چیست؟
Response یا پاسخ، پیامی است که سرور پس از پردازش درخواست به مرورگر یا برنامه ارسال میکند.
این پاسخ میتواند شامل موارد مختلفی باشد:
- یک صفحه HTML
- اطلاعات یک API
- تصویر
- فایل دانلودی
- پیام خطا
به بیان ساده، Response نتیجه پردازش Request است.
یک مثال واقعی؛ ورود به حساب کاربری
فرض کنید در یک وبسایت آموزشی وارد صفحه ورود میشوید و ایمیل و رمز عبور خود را وارد میکنید.
پس از کلیک روی دکمه «ورود»، مرورگر یک Request شامل اطلاعات ورود برای سرور ارسال میکند.
سرور اطلاعات را بررسی میکند و اگر همهچیز صحیح باشد، یک Response موفق ارسال میکند و حساب کاربری شما باز میشود.
اگر اطلاعات نادرست باشند، Response شامل پیام خطا خواهد بود.
آیا HTTP فقط برای نمایش صفحات وب استفاده میشود؟
خیر. اگرچه HTTP ابتدا برای انتقال صفحات وب طراحی شد، اما امروزه کاربردهای بسیار گستردهتری دارد.
برای مثال، بسیاری از سرویسهای زیر از HTTP استفاده میکنند:
- وبسایتها
- REST APIها
- اپلیکیشنهای موبایل
- سرویسهای ابری
- سامانههای بانکی
- فروشگاههای اینترنتی
- بخش بزرگی از سرویسهای هوش مصنوعی
هر زمان که نرمافزاری از طریق وب اطلاعاتی را ارسال یا دریافت کند، احتمال زیادی وجود دارد که این ارتباط بر پایه HTTP انجام شود.
ارتباط HTTP با API چیست؟
در مقاله قبلی با مفهوم API آشنا شدیم و دیدیم که API راهی برای ارتباط بین نرمافزارها است.
بیشتر Web APIها برای ارسال Request و دریافت Response از پروتکل HTTP استفاده میکنند.
به عبارت دیگر، HTTP قوانین ارتباط را مشخص میکند و API قابلیتهایی را ارائه میدهد که نرمافزارها از آنها استفاده میکنند.
در بخش بعدی مقاله با ساختار Request و Response، متدهای HTTP، Header، Status Code و تفاوت HTTP و HTTPS آشنا خواهیم شد.
ساختار یک Request در HTTP
هر Request که از مرورگر یا یک برنامه به سرور ارسال میشود، ساختار مشخصی دارد. این ساختار باعث میشود سرور بتواند درخواست را بهدرستی درک و پردازش کند.
یک Request معمولاً از بخشهای زیر تشکیل میشود:
- متد (Method)
- آدرس یا URL
- Header
- Body (در صورت نیاز)
هر کدام از این بخشها وظیفه مشخصی دارند و کنار هم پیام کاملی را برای سرور تشکیل میدهند.
Method چیست؟
متد یا Method مشخص میکند که کلاینت قصد انجام چه عملی را دارد.
هر متد برای هدف خاصی طراحی شده است و سرور بر اساس آن تصمیم میگیرد درخواست را چگونه پردازش کند.
رایجترین متدهای HTTP عبارتاند از:
- GET برای دریافت اطلاعات
- POST برای ایجاد اطلاعات جدید
- PUT برای جایگزین کردن اطلاعات
- PATCH برای ویرایش بخشی از اطلاعات
- DELETE برای حذف اطلاعات
مثالهایی از متدهای HTTP
فرض کنید در یک فروشگاه اینترنتی هستید.
- باز کردن صفحه یک محصول معمولاً با متد GET انجام میشود.
- ثبت یک سفارش جدید معمولاً از POST استفاده میکند.
- ویرایش اطلاعات پروفایل کاربر ممکن است با PATCH یا PUT انجام شود.
- حذف یک آدرس ذخیرهشده معمولاً با DELETE انجام میشود.
به همین دلیل، نوع متد به کاری بستگی دارد که قرار است روی دادهها انجام شود.
URL چیست؟
URL یا Uniform Resource Locator آدرسی است که مشخص میکند درخواست باید به کجا ارسال شود.
برای مثال، زمانی که صفحه محصولات یک فروشگاه را باز میکنید، مرورگر Request را به URL مربوط به آن صفحه ارسال میکند.
هر URL میتواند یک صفحه وب، یک تصویر، یک فایل یا حتی یک Endpoint از یک API را مشخص کند.
Header چیست؟
Header مجموعهای از اطلاعات اضافی درباره Request یا Response است.
این اطلاعات به سرور و مرورگر کمک میکنند تا بهتر با یکدیگر ارتباط برقرار کنند.
برای مثال، Header میتواند اطلاعات زیر را مشخص کند:
- نوع داده ارسالی
- نوع داده مورد انتظار در پاسخ
- اطلاعات احراز هویت
- زبان ترجیحی کاربر
- کوکیهای مربوط به نشست کاربر
کاربران معمولاً Headerها را نمیبینند، اما توسعهدهندگان بهطور مداوم با آنها سروکار دارند.
Body چیست؟
Body بخشی از Request یا Response است که داده اصلی در آن قرار میگیرد.
برای مثال، زمانی که فرم ثبتنام یک وبسایت را تکمیل میکنید، اطلاعاتی مانند نام، ایمیل و رمز عبور معمولاً داخل Body درخواست ارسال میشوند.
در بسیاری از APIهای امروزی، دادههای Body با قالب JSON ارسال میشوند که در مقالهای جداگانه به آن خواهیم پرداخت.
ساختار یک Response در HTTP
پس از اینکه سرور Request را پردازش کرد، یک Response به کلاینت ارسال میکند.
یک Response معمولاً شامل بخشهای زیر است:
- Status Code
- Header
- Body
مرورگر با استفاده از این اطلاعات تصمیم میگیرد صفحه را نمایش دهد، فایل را دانلود کند یا پیام خطا نشان دهد.
Status Code چیست؟
Status Code یک عدد سهرقمی است که نتیجه پردازش Request را مشخص میکند.
این کدها به مرورگر یا برنامه اطلاع میدهند که درخواست با موفقیت انجام شده یا مشکلی به وجود آمده است.
چند نمونه از معروفترین Status Codeها عبارتاند از:
- 200 OK : درخواست با موفقیت انجام شده است.
- 201 Created : اطلاعات جدید با موفقیت ایجاد شده است.
- 301 Moved Permanently : آدرس صفحه بهطور دائمی تغییر کرده است.
- 400 Bad Request : درخواست نامعتبر است.
- 401 Unauthorized : کاربر باید احراز هویت شود.
- 403 Forbidden : دسترسی به این بخش مجاز نیست.
- 404 Not Found : منبع موردنظر پیدا نشد.
- 500 Internal Server Error : خطایی در سمت سرور رخ داده است.
اگر هنگام استفاده از یک وبسایت با خطای 404 یا 500 روبهرو شده باشید، در واقع همین Status Codeها را مشاهده کردهاید.
تفاوت HTTP و HTTPS چیست؟
یکی از رایجترین پرسشها این است که HTTP چه تفاوتی با HTTPS دارد.
HTTP اطلاعات را بدون رمزنگاری منتقل میکند. به همین دلیل، اگر شخصی به مسیر انتقال اطلاعات دسترسی پیدا کند، ممکن است بتواند محتوای آنها را مشاهده کند.
اما HTTPS همان HTTP است که با استفاده از فناوری رمزنگاری، ارتباط بین مرورگر و سرور را ایمن میکند.
به همین دلیل، امروزه تقریباً تمام وبسایتهایی که اطلاعات کاربران را دریافت میکنند، از HTTPS استفاده میکنند.
چرا HTTPS اهمیت دارد؟
فرض کنید در یک فروشگاه اینترنتی شماره کارت بانکی یا رمز عبور خود را وارد میکنید.
اگر ارتباط رمزنگاری نشده باشد، احتمال سرقت اطلاعات در شرایط خاص وجود خواهد داشت.
HTTPS این خطر را تا حد زیادی کاهش میدهد و باعث میشود اطلاعات هنگام انتقال بهصورت رمزنگاریشده ارسال شوند.
به همین دلیل، مرورگرهای امروزی وبسایتهایی را که هنوز از HTTP استفاده میکنند، معمولاً بهعنوان اتصال ناامن (Not Secure) نمایش میدهند.
HTTP در برنامهنویسی Backend چه کاربردی دارد؟
تقریباً تمام برنامههای Backend بهنوعی با HTTP سروکار دارند.
برای مثال، زمانی که در Django یک View یا یک API ایجاد میکنید، درخواستهای HTTP از سمت کاربران دریافت میشوند، پردازش انجام میشود و در نهایت یک Response برای کاربر ارسال میشود.
به همین دلیل، درک مفاهیمی مانند Request، Response، Method، Header و Status Code یکی از پایهایترین مهارتهای هر توسعهدهنده Backend محسوب میشود.
در بخش پایانی مقاله، ویژگیهای HTTP، محدودیتهای آن، نسخههای مختلف این پروتکل و مهمترین نکاتی را که هر برنامهنویس باید بداند بررسی خواهیم کرد.
ویژگیهای مهم HTTP
HTTP یکی از مهمترین فناوریهای وب است و ویژگیهایی دارد که باعث شده تقریباً تمام وبسایتها و بسیاری از سرویسهای اینترنتی بر پایه آن کار کنند.
برخی از مهمترین ویژگیهای HTTP عبارتاند از:
- سادگی در پیادهسازی و استفاده
- پشتیبانی توسط تمام مرورگرهای مدرن
- امکان انتقال انواع مختلف داده مانند HTML، تصاویر، فایلها و JSON
- قابلیت استفاده در وبسایتها، APIها و اپلیکیشنهای موبایل
- قابلیت توسعه از طریق Headerها و استانداردهای جدید
آیا HTTP بدون اتصال است؟
یکی از ویژگیهای مهم HTTP این است که یک پروتکل Stateless محسوب میشود.
Stateless بودن یعنی هر Request بهصورت مستقل پردازش میشود و سرور بهطور پیشفرض اطلاعاتی از درخواستهای قبلی کاربر نگه نمیدارد.
برای مثال، اگر صفحه اصلی یک فروشگاه اینترنتی را باز کنید و سپس وارد صفحه سبد خرید شوید، از دید HTTP این دو درخواست مستقل از یکدیگر هستند.
برای اینکه وبسایت بتواند کاربر را بین درخواستهای مختلف شناسایی کند، معمولاً از فناوریهایی مانند Session و Cookie استفاده میشود که در مقالات جداگانه آنها را بررسی خواهیم کرد.
نسخههای مختلف HTTP
HTTP در طول سالها پیشرفت کرده و نسخههای مختلفی از آن ارائه شده است.
HTTP/1.1
این نسخه سالها پرکاربردترین نسخه HTTP بود و هنوز هم بسیاری از وبسایتها از آن استفاده میکنند.
در HTTP/1.1 امکان استفاده مجدد از اتصال و بهبود عملکرد نسبت به نسخههای اولیه فراهم شد.
HTTP/2
HTTP/2 با هدف افزایش سرعت و کاهش تأخیر معرفی شد.
در این نسخه امکان ارسال همزمان چندین Request و Response روی یک اتصال فراهم شده است و به همین دلیل سرعت بارگذاری بسیاری از وبسایتها افزایش پیدا کرده است.
HTTP/3
جدیدترین نسخه HTTP، یعنی HTTP/3، از فناوری متفاوتی برای انتقال داده استفاده میکند و هدف آن کاهش تأخیر، افزایش پایداری ارتباط و بهبود عملکرد، بهویژه در شبکههای ناپایدار و موبایل است.
امروزه بسیاری از مرورگرها و وبسایتهای بزرگ از HTTP/3 نیز پشتیبانی میکنند.
آیا برنامهنویسان باید تمام جزئیات HTTP را بدانند؟
خیر. برای شروع توسعه وب، لازم نیست همه جزئیات فنی HTTP را حفظ کنید.
آنچه اهمیت بیشتری دارد، درک مفاهیم اصلی مانند Request، Response، Method، Header، Status Code و تفاوت HTTP با HTTPS است.
با کار روی پروژههای واقعی، بهتدریج با سایر قابلیتها و جزئیات این پروتکل نیز آشنا خواهید شد.
یک مثال واقعی از عملکرد HTTP در Backend
فرض کنید در یک فروشگاه اینترنتی روی دکمه «افزودن به سبد خرید» کلیک میکنید.
در این لحظه معمولاً مراحل زیر اتفاق میافتد:
- مرورگر یک Request به سرور ارسال میکند.
- درخواست مشخص میکند کدام محصول باید به سبد خرید اضافه شود.
- سرور اطلاعات را بررسی میکند.
- در صورت معتبر بودن درخواست، محصول به سبد خرید اضافه میشود.
- سرور یک Response با Status Code مناسب ارسال میکند.
- مرورگر نتیجه را نمایش میدهد و تعداد محصولات سبد خرید بهروزرسانی میشود.
تمام این فرآیند تنها در چند لحظه انجام میشود، اما در پشت صحنه قوانین HTTP مسئول مدیریت این ارتباط هستند.
چرا یادگیری HTTP برای برنامهنویسان مهم است؟
تقریباً تمام توسعهدهندگان وب، چه در بخش Frontend و چه Backend، روزانه با HTTP سروکار دارند.
اگر بدانید مرورگر چگونه Request ارسال میکند، سرور چگونه Response برمیگرداند و هر Status Code چه مفهومی دارد، درک عملکرد وبسایتها و APIها برایتان بسیار سادهتر خواهد شد.
همچنین هنگام عیبیابی پروژهها، شناخت HTTP کمک میکند سریعتر علت بسیاری از خطاها را پیدا کنید.
جمعبندی
HTTP یا Hypertext Transfer Protocol پروتکلی است که ارتباط بین مرورگر و وبسرور را مدیریت میکند. هر بار که صفحهای از یک وبسایت را باز میکنید یا از یک API اطلاعاتی دریافت میکنید، معمولاً یک Request به سرور ارسال و یک Response دریافت میشود.
مفاهیمی مانند Method، Header، Body و Status Code اجزای اصلی این ارتباط هستند و درک آنها برای هر برنامهنویس وب ضروری است.
امروزه تقریباً تمام وبسایتهای مدرن از نسخه امن این پروتکل، یعنی HTTPS، استفاده میکنند تا اطلاعات کاربران هنگام انتقال رمزنگاری شود.
سؤالات متداول
HTTP چیست؟
HTTP مخفف Hypertext Transfer Protocol است و مجموعه قوانینی را تعریف میکند که مرورگرها و وبسرورها بر اساس آن اطلاعات را با یکدیگر تبادل میکنند.
تفاوت HTTP و HTTPS چیست؟
HTTPS نسخه امن HTTP است که با استفاده از رمزنگاری، ارتباط بین کلاینت و سرور را محافظت میکند و امنیت بیشتری در انتقال اطلاعات فراهم میآورد.
Request و Response چیست؟
Request پیامی است که کلاینت برای سرور ارسال میکند و Response پاسخی است که سرور پس از پردازش درخواست به کلاینت برمیگرداند.
متداولترین Status Codeها کداماند؟
از رایجترین کدها میتوان به 200 (موفق)، 201 (ایجاد شد)، 301 (انتقال دائمی)، 400 (درخواست نامعتبر)، 401 (نیاز به احراز هویت)، 403 (عدم دسترسی)، 404 (یافت نشد) و 500 (خطای داخلی سرور) اشاره کرد.
مطالعه بیشتر
قدم بعدی چیست؟
اکنون که با HTTP و نحوه تبادل Request و Response آشنا شدید، در مقاله بعدی بررسی میکنیم JSON چیست و چرا تقریباً تمام APIهای مدرن برای تبادل داده از این قالب استفاده میکنند.
نظرات
هنوز نظری ثبت نشده؛ اولین نفر باشید.
ثبت نظر
در حال پاسخ به