وقتی مرورگر خود را باز میکنید و آدرس یک وبسایت را وارد میکنید، پشت صحنه اتفاقی ساده اما حیاتی رخ میدهد: مرورگر شما با سرور آن وبسایت ارتباط برقرار میکند و دادهها را رد و بدل میکند. این ارتباط بر پایهی پروتکلی به نام HTTP (HyperText Transfer Protocol) شکل میگیرد.
HTTP ستون فقرات وب است، همان چیزی که باعث میشود صفحات، تصاویر، ویدیوها و دادههای مختلف از سرور به مرورگر شما منتقل شوند. بدون HTTP، اینترنت به شکل امروزی وجود نداشت.
در این بخش مقدمهای کوتاه بر اهمیت HTTP ارائه میدهیم:
- تعریف ساده: HTTP یک پروتکل ارتباطی در لایهی اپلیکیشن است که برای انتقال دادههای متنی بین کلاینت (مثلاً مرورگر) و سرور استفاده میشود.
- کاربرد روزمره: هر بار که روی یک لینک کلیک میکنید، فرم ثبتنام ارسال میکنید یا حتی اپلیکیشن موبایل شما به یک API متصل میشود، در واقع یک درخواست HTTP در حال اجراست.
- چرا مهم است؟ شناخت HTTP برای توسعهدهندگان وب، مدیران سرور و حتی کاربران پیشرفته ضروری است. این دانش کمک میکند تا بتوانید مشکلات را بهتر دیباگ کنید، امنیت را افزایش دهید و عملکرد وبسایتها را بهینه کنید.
در ادامهی این مطلب، ابتدا به تاریخچه و مفهوم کلی HTTP میپردازیم، سپس ساختار درخواست و پاسخ را بررسی میکنیم، متدهای پرکاربرد مانند GET و POST را توضیح میدهیم، با کدهای وضعیت (Status Codes) آشنا میشویم و در نهایت هدرهای مهم و نقش آنها در امنیت و عملکرد وب را مرور خواهیم کرد.
تاریخچه و مفهوم کلی HTTP
برای درک بهتر HTTP، خوب است ابتدا نگاهی به تاریخچه و تکامل آن بیندازیم. این پروتکل از ابتدای دههی ۹۰ میلادی معرفی شد و به مرور زمان نسخههای جدیدتر و پیشرفتهتری از آن ارائه شدند تا نیازهای روزافزون وب را پاسخ دهند.
1. آغاز HTTP
- اولین نسخهی HTTP در سال 1990 توسط تیم برنرز-لی معرفی شد.
- نسخهی اولیه (HTTP/0.9) بسیار ساده بود: تنها یک متد داشت (GET) و فقط برای دریافت فایلهای متنی استفاده میشد.
2. HTTP/1.0
- در سال 1996 معرفی شد.
- پشتیبانی از متدهای جدید مانند POST و HEAD اضافه شد.
- امکان استفاده از هدرها برای انتقال اطلاعات بیشتر فراهم شد.
- هر درخواست نیازمند یک اتصال جداگانه به سرور بود (غیرکارآمد برای وبسایتهای بزرگ).
3. HTTP/1.1
- در سال 1997 استاندارد شد و هنوز هم بهطور گسترده استفاده میشود.
- ویژگی مهم: Persistent Connections (اتصال پایدار) که اجازه میدهد چندین درخواست روی یک اتصال TCP ارسال شوند.
- پشتیبانی از کشینگ، کنترل جریان داده، و متدهای جدید مانند OPTIONS و PUT.
- بهبود چشمگیر در عملکرد و کارایی نسبت به نسخهی قبلی.
4. HTTP/2
- در سال 2015 معرفی شد.
- مبتنی بر پروتکل SPDY گوگل.
- ویژگیها:
- Multiplexing: ارسال همزمان چندین درخواست روی یک اتصال.
- فشردهسازی هدرها برای کاهش حجم داده.
- بهبود سرعت بارگذاری صفحات وب.
5. HTTP/3
- جدیدترین نسخه، مبتنی بر پروتکل QUIC (که روی UDP کار میکند).
- هدف: کاهش تأخیر و افزایش امنیت.
- بهینه برای ارتباطات مدرن (مانند موبایل و شبکههای پرنوسان).
جایگاه HTTP در معماری شبکه
- HTTP در لایهی اپلیکیشن مدل TCP/IP قرار دارد.
- برای انتقال داده از پروتکلهای زیرین مانند TCP (در نسخههای قدیمی) یا QUIC (در HTTP/3) استفاده میکند.
- نقش آن: تعریف قوانین و قالبی که کلاینت و سرور برای تبادل داده باید رعایت کنند.
ساختار کلی یک درخواست و پاسخ HTTP
برای فهمیدن اینکه HTTP چگونه کار میکند، باید به شکل پیامهایی که بین مرورگر و سرور رد و بدل میشوند نگاه کنیم. هر ارتباط شامل یک «درخواست» از سمت کلاینت و یک «پاسخ» از سمت سرور است.
درخواست HTTP معمولاً با یک خط آغاز میشود که متد، مسیر و نسخهی پروتکل را مشخص میکند. مثلاً مرورگر برای دریافت صفحهی اصلی سایت ممکن است چنین خطی بفرستد:
GET /index.html HTTP/1.1
بعد از این خط، مجموعهای از هدرها قرار میگیرند که اطلاعات بیشتری دربارهی درخواست ارائه میدهند؛ مثل اینکه درخواست به کدام دامنه ارسال شده یا مرورگر چه نوع محتوایی را ترجیح میدهد. اگر متدی مانند POST یا PUT استفاده شود، بدنهی درخواست هم اضافه میشود که دادههای کاربر (مثلاً فرم ثبتنام یا JSON) را در خود دارد.
پاسخ سرور هم ساختاری مشابه دارد. خط اول آن وضعیت را مشخص میکند، شامل نسخهی پروتکل، کد وضعیت و توضیح کوتاه. برای نمونه:
HTTP/1.1 200 OK
پس از آن هدرهایی میآیند که نوع دادهی بازگشتی، طول محتوا یا دستور ذخیرهی کوکی را مشخص میکنند. در نهایت بدنهی پاسخ همان چیزی است که مرورگر نمایش میدهد؛ مثلاً کد HTML یک صفحه یا دادهی JSON برای یک API.
برای روشنتر شدن موضوع، یک نمونهی ساده از درخواست و پاسخ را ببینیم:
درخواست:
GET /about.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
پاسخ:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1256
<html>
<head><title>About Us</title></head>
<body>
<h1>Welcome to Example.com</h1>
</body>
</html>
این مثال نشان میدهد که HTTP در اصل یک گفتوگوی ساده بین مرورگر و سرور است: مرورگر چیزی میخواهد، سرور پاسخ میدهد، و مرورگر آن را برای کاربر نمایش میدهد.
متدهای HTTP
یکی از مهمترین ویژگیهای HTTP، وجود متدها یا همان «روشهای درخواست» است. این متدها تعیین میکنند که کلاینت از سرور چه چیزی میخواهد و نوع تعامل چگونه خواهد بود.
GET رایجترین متد است. مرورگر وقتی میخواهد یک صفحه یا فایل را دریافت کند، از GET استفاده میکند. دادهها در این حالت در URL قرار میگیرند و برای عملیاتهایی مثل جستجو یا بارگذاری صفحات مناسب است. اما محدودیت دارد: حجم دادهی قابل ارسال کم است و امنیت پایینتری دارد چون اطلاعات در آدرس دیده میشوند.
POST برای ارسال داده به سرور به کار میرود. وقتی فرم ثبتنام یا ورود را پر میکنید، مرورگر دادهها را در بدنهی درخواست قرار میدهد و به سرور میفرستد. این روش امنتر از GET است چون دادهها در URL نمایش داده نمیشوند و حجم بیشتری را میتوان منتقل کرد.

علاوه بر این دو متد اصلی، متدهای دیگری هم وجود دارند:
- PUT برای جایگزین کردن یا بهروزرسانی یک منبع.
- DELETE برای حذف یک منبع.
- PATCH برای تغییر بخشی از یک منبع.
- HEAD مشابه GET است اما فقط هدرها را برمیگرداند و بدنه ندارد.
- OPTIONS برای پرسیدن اینکه سرور چه متدهایی را پشتیبانی میکند.
برای مثال، فرض کنید یک API ساده دارید:
- اگر بخواهید لیست کاربران را ببینید، از
GET /usersاستفاده میکنید. - اگر بخواهید کاربر جدیدی اضافه کنید، درخواست
POST /usersبا دادههای کاربر ارسال میشود. - اگر بخواهید اطلاعات یک کاربر خاص را تغییر دهید،
PUT /users/123یاPATCH /users/123به کار میرود. - و اگر بخواهید کاربر را حذف کنید،
DELETE /users/123مناسب است.
این متدها در کنار هم مجموعهای قدرتمند برای مدیریت منابع وب ایجاد میکنند و اساس طراحی بسیاری از سرویسهای مدرن، بهویژه APIهای RESTful، بر همین اصول بنا شده است.
کدهای وضعیت HTTP (Status Codes)
وقتی مرورگر یا اپلیکیشن شما درخواستی به سرور ارسال میکند، سرور همیشه پاسخی همراه با یک «کد وضعیت» برمیگرداند. این کدها سهرقمی هستند و به کلاینت میگویند که آیا درخواست موفق بوده، نیاز به اقدام خاصی دارد، یا با خطا مواجه شده است.
دستهبندی کلی کدهای وضعیت
کدهای HTTP به پنج دسته اصلی تقسیم میشوند:
-
۱xx – پاسخهای اطلاعاتی: نشان میدهند که درخواست دریافت شده و در حال پردازش است. معمولاً در ارتباطات پیچیده یا چندمرحلهای کاربرد دارند.
مثال:100 Continueیعنی کلاینت میتواند ادامهی درخواست را ارسال کند. -
۲xx – موفقیتآمیز: نشاندهندهی موفقیت در پردازش درخواست.
مثال:200 OKیعنی همهچیز درست انجام شده و پاسخ آماده است.
مثال دیگر:201 Createdبرای زمانی که یک منبع جدید ایجاد شده (مثلاً پس از POST). -
۳xx – تغییر مسیر (Redirect): کلاینت باید به آدرس دیگری مراجعه کند.
مثال:301 Moved Permanentlyیعنی منبع بهطور دائم به آدرس جدیدی منتقل شده.
مثال:302 Foundبرای تغییر مسیر موقت. -
۴xx – خطای سمت کلاینت: درخواست اشتباه بوده یا مجاز نیست.
مثال:400 Bad Requestیعنی ساختار درخواست نادرست است.
مثال معروف:404 Not Foundیعنی منبع موردنظر پیدا نشد.
مثال:403 Forbiddenیعنی دسترسی به منبع ممنوع است. -
۵xx – خطای سمت سرور: سرور نتوانسته درخواست را پردازش کند.
مثال:500 Internal Server Errorیعنی مشکلی در سرور رخ داده.
مثال:502 Bad Gatewayیعنی سرور بهعنوان واسطه پاسخ نامعتبری دریافت کرده.

کاربرد عملی در توسعه و دیباگ
درک این کدها برای توسعهدهندگان وب و API بسیار حیاتی است. مثلاً اگر فرم ثبتنام شما همیشه 400 Bad Request برمیگرداند، احتمالاً دادهها بهدرستی ارسال نمیشوند. یا اگر در بارگذاری صفحه با 404 Not Found مواجه شدید، باید لینکها یا مسیر فایلها را بررسی کنید.
همچنین در سئو، کدهای وضعیت نقش مهمی دارند. موتورهای جستجو به کدهای 301 و 404 حساساند و استفادهی نادرست از آنها میتواند رتبهی سایت را کاهش دهد.
هدرهای HTTP
هدرهای HTTP اطلاعات جانبی و حیاتیای هستند که همراه با هر درخواست یا پاسخ ارسال میشوند. این اطلاعات به کلاینت و سرور کمک میکنند تا بهتر یکدیگر را درک کنند، نوع دادهها را مشخص کنند، رفتار ارتباط را کنترل کنند و حتی امنیت را افزایش دهند.
در یک درخواست، هدرها میتوانند مشخص کنند که کلاینت چه نوع محتوایی انتظار دارد، از چه مرورگری استفاده میکند، یا آیا مجوز دسترسی دارد. در پاسخ، هدرها میگویند که دادهی بازگشتی چه نوعی است، چقدر طول دارد، و آیا باید در کش مرورگر ذخیره شود یا نه.
برای مثال، وقتی مرورگر شما صفحهای را درخواست میکند، ممکن است چنین هدرهایی ارسال کند:
User-Agent: مشخص میکند مرورگر یا کلاینت چیست.Accept: نوع محتوای مورد انتظار (مثلاً HTML یا JSON).Authorization: اگر نیاز به احراز هویت باشد، این هدر اطلاعات مربوط به توکن یا رمز عبور را منتقل میکند.
در پاسخ سرور، هدرهایی مثل اینها رایجاند:
Content-Type: نوع دادهی بازگشتی را مشخص میکند (مثلاًtext/htmlیاapplication/json).Set-Cookie: برای ذخیرهی کوکی در مرورگر کاربر.Cache-Control: تعیین میکند که آیا مرورگر میتواند پاسخ را کش کند یا نه.
هدرها فقط برای انتقال اطلاعات فنی نیستند؛ آنها نقش مهمی در امنیت هم دارند. مثلاً:
Strict-Transport-Security: مرورگر را مجبور میکند همیشه از HTTPS استفاده کند.Content-Security-Policy: محدود میکند که چه منابعی (اسکریپت، تصویر، فونت) قابل بارگذاری هستند.Access-Control-Allow-Origin: در کنترل دسترسی بین دامنهها (CORS) کاربرد دارد.
در توسعهی وبسایتها و APIها، درک دقیق هدرها به شما کمک میکند تا ارتباطات امنتر، سریعتر و قابل کنترلتری بسازید. بسیاری از مشکلات مربوط به احراز هویت، کشینگ، یا بارگذاری منابع به تنظیمات نادرست هدرها برمیگردد.
کاربردهای عملی و سناریوها
تا اینجا بیشتر جنبههای نظری و ساختاری HTTP را بررسی کردیم. حالا وقت آن است که ببینیم این پروتکل در زندگی روزمرهی دیجیتال ما چگونه حضور دارد و چه کاربردهایی دارد.

- در مرورگرها: هر بار که شما یک لینک را باز میکنید، مرورگر یک درخواست HTTP به سرور میفرستد و پاسخ را دریافت میکند. حتی بارگذاری تصاویر، فایلهای CSS و اسکریپتهای جاوااسکریپت همگی با درخواستهای جداگانه انجام میشوند. ابزارهای داخلی مرورگر مثل DevTools به شما اجازه میدهند این درخواستها و پاسخها را ببینید و بررسی کنید.
- در APIها و وبسرویسها: بسیاری از اپلیکیشنهای موبایل و سرویسهای آنلاین برای ارتباط با سرور از HTTP استفاده میکنند. مثلاً وقتی اپلیکیشن آبوهوا را باز میکنید، یک درخواست GET به سرور ارسال میشود تا دادههای جدید دریافت شود. یا وقتی در شبکه اجتماعی عکسی آپلود میکنید، یک درخواست POST برای ارسال دادهها به سرور فرستاده میشود.
- در RESTful APIs: طراحی مدرن سرویسها بر پایهی متدهای HTTP است. منابع (مثل کاربر، محصول یا سفارش) با آدرسهای مشخص (endpoint) در دسترس هستند و متدهای GET، POST، PUT و DELETE برای مدیریت آنها استفاده میشوند. این الگو باعث شده توسعهی سرویسها سادهتر و استانداردتر شود.
- ابزارهای تست و دیباگ: توسعهدهندگان برای بررسی درخواستها و پاسخها از ابزارهایی مثل Postman یا curl استفاده میکنند. این ابزارها امکان ارسال درخواستهای مختلف و مشاهدهی دقیق پاسخها را فراهم میکنند و برای تست APIها حیاتیاند.
- نقش در امنیت و عملکرد: هدرها و کدهای وضعیت در کنار HTTPS به توسعهدهندگان کمک میکنند تا ارتباط امنتر و سریعتری ایجاد کنند. مثلاً با تنظیم درست Cache-Control میتوان سرعت بارگذاری صفحات را افزایش داد، یا با استفاده از هدرهای امنیتی جلوی حملات رایج را گرفت.
جمعبندی
در این مطلب، با یکی از بنیادیترین پروتکلهای دنیای وب آشنا شدیم: HTTP. از تاریخچهی آن تا ساختار درخواست و پاسخ، از متدهای پرکاربرد مثل GET و POST تا کدهای وضعیت و هدرهای امنیتی، هر بخش نشان داد که HTTP نهتنها یک استاندارد فنی، بلکه زبان مشترک بین مرورگرها، سرورها و اپلیکیشنهاست.
شناخت دقیق HTTP به توسعهدهندگان کمک میکند تا ارتباطات امنتر، سریعتر و قابلاعتمادتری بسازند. درک متدها و کدهای وضعیت باعث میشود خطاها بهتر دیباگ شوند، و استفادهی درست از هدرها میتواند عملکرد و امنیت را بهطور چشمگیری بهبود دهد.
در دنیایی که APIها، اپلیکیشنهای موبایل، و سرویسهای ابری هر روز پیچیدهتر میشوند، HTTP همچنان نقش ستون فقرات ارتباطات را ایفا میکند. یادگیری آن نهتنها برای برنامهنویسان وب، بلکه برای هر کسی که با فناوری سروکار دارد، یک سرمایهگذاری بلندمدت است.
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید