HTTP چیست؟ آشنایی کامل با HTTP، Request، Response و Status Code
HTTP چیست؟ اگر با طراحی سایت، برنامهنویسی وب، API یا حتی مرورگرها کار کرده باشید، احتمالاً بارها با عبارت HTTP مواجه شدهاید. تقریباً هر بار که یک وبسایت را باز میکنید، اطلاعاتی از یک API دریافت میکنید یا فرمی را در یک سایت ارسال میکنید، پروتکل HTTP در پشت صحنه نقش دارد.
HTTP مخفف HyperText Transfer Protocol است و یکی از مهمترین پروتکلهای ارتباطی در دنیای وب محسوب میشود. این پروتکل مشخص میکند که Client و Server چگونه درخواستها و پاسخهای خود را با یکدیگر مبادله کنند.
در این مقاله به زبان ساده بررسی میکنیم که HTTP چیست، چگونه کار میکند، HTTP Request و Response چه هستند، متدهای GET و POST چه کاربردی دارند، Status Codeها چه مفهومی دارند و HTTPS چه تفاوتی با HTTP دارد.
HTTP چیست؟
HTTP یک پروتکل ارتباطی در لایه Application است که برای انتقال اطلاعات بین Client و Server در وب استفاده میشود.
برای مثال، زمانی که شما آدرس یک وبسایت را در مرورگر وارد میکنید، مرورگر به عنوان Client یک درخواست به Server ارسال میکند. Server پس از پردازش درخواست، پاسخ مناسب را به مرورگر برمیگرداند.
Client
|
| HTTP Request
↓
Server
|
| HTTP Response
↓
Client
Client میتواند مرورگر، اپلیکیشن موبایل، نرمافزار دسکتاپ یا حتی یک سرویس نرمافزاری دیگر باشد.
Server نیز وظیفه دریافت درخواست، پردازش آن و ارسال پاسخ مناسب را بر عهده دارد.
HTTP مخفف چیست؟
HTTP مخفف عبارت HyperText Transfer Protocol به معنی «پروتکل انتقال ابرمتن» است.
HTTP در ابتدا بیشتر برای انتقال صفحات وب و اسناد HTML مورد استفاده قرار میگرفت، اما امروزه کاربرد آن بسیار گستردهتر شده است و برای ارتباط با APIها، انتقال JSON، ارسال فرمها، دریافت تصاویر، فایلها و انواع دیگر دادهها نیز استفاده میشود.
HTTP چگونه کار میکند؟
فرآیند ارتباط با HTTP را میتوان به چند مرحله ساده تقسیم کرد:
- کاربر یک درخواست ایجاد میکند؛ برای مثال باز کردن یک URL.
- مرورگر یا Client یک HTTP Request به Server ارسال میکند.
- Server درخواست را دریافت و پردازش میکند.
- Server یک HTTP Response ایجاد میکند.
- Response برای Client ارسال میشود.
- Client نتیجه را به کاربر نمایش میدهد.
برای مثال، وقتی کاربر وارد آدرس زیر میشود:
https://example.com/products
مرورگر میتواند یک درخواست مشابه زیر ارسال کند:
GET /products HTTP/1.1
Host: example.com
Accept: text/html
Server نیز ممکن است پاسخ زیر را ارسال کند:
HTTP/1.1 200 OK
Content-Type: text/html
<html>
...
</html>
HTTP Request چیست؟
HTTP Request پیامی است که Client برای Server ارسال میکند و به Server میگوید چه عملیاتی باید انجام شود.
یک HTTP Request میتواند شامل بخشهای مختلفی باشد:
- HTTP Method
- URL یا Path
- HTTP Version
- Request Headers
- Request Body
برای مثال:
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer TOKEN
{
"name": "Ali",
"email": "ali@example.com"
}
در این مثال، Client یک درخواست POST به مسیر /api/users ارسال کرده و اطلاعات کاربر را در قالب JSON فرستاده است.
HTTP Response چیست؟
پس از دریافت و پردازش Request، Server یک HTTP Response برای Client ارسال میکند.
یک Response معمولاً شامل موارد زیر است:
- HTTP Version
- Status Code
- Response Headers
- Response Body
برای مثال:
HTTP/1.1 201 Created
Content-Type: application/json
{
"id": 25,
"name": "Ali"
}
در این مثال Status Code برابر با 201 است که نشان میدهد یک Resource جدید با موفقیت ایجاد شده است.
HTTP Methods چیستند؟
HTTP برای مشخص کردن هدف یک درخواست از Method استفاده میکند. هر Method معنای مشخصی دارد.
| Method | کاربرد |
|---|---|
| GET | دریافت اطلاعات |
| POST | ارسال اطلاعات یا ایجاد Resource |
| PUT | جایگزینی کامل Resource |
| PATCH | بهروزرسانی بخشی از Resource |
| DELETE | حذف Resource |
| HEAD | دریافت اطلاعات Header بدون Body |
| OPTIONS | بررسی قابلیتها و متدهای قابل استفاده |
GET چیست؟
متد GET معمولاً برای دریافت اطلاعات از Server استفاده میشود.
برای مثال:
GET /products
میتواند لیست محصولات را دریافت کند.
یا:
GET /products/25
میتواند اطلاعات محصول شماره 25 را دریافت کند.
در حالت استاندارد، GET نباید برای ایجاد تغییر در وضعیت Server استفاده شود.
POST چیست؟
متد POST معمولاً برای ارسال اطلاعات به Server یا ایجاد یک Resource جدید استفاده میشود.
برای مثال:
POST /api/users
با داده زیر:
{
"name": "Ali",
"email": "ali@example.com"
}
Server میتواند یک کاربر جدید ایجاد کند.
PUT و PATCH چه تفاوتی دارند؟
هر دو Method برای بهروزرسانی اطلاعات استفاده میشوند، اما مفهوم آنها متفاوت است.
PUT معمولاً برای جایگزینی کامل یک Resource استفاده میشود.
PUT /users/25
در مقابل، PATCH برای اعمال تغییرات جزئی روی Resource مناسب است.
PATCH /users/25
به زبان ساده:
- PUT: جایگزینی کامل Resource
- PATCH: تغییر بخشی از Resource
DELETE چیست؟
متد DELETE برای حذف یک Resource استفاده میشود.
DELETE /users/25
در یک API میتوان از این درخواست برای حذف کاربر شماره 25 استفاده کرد.
HTTP Status Code چیست؟
بعد از پردازش Request، Server باید نتیجه عملیات را به Client اعلام کند. این کار با استفاده از HTTP Status Code انجام میشود.
Status Codeها به پنج گروه اصلی تقسیم میشوند:
| محدوده | مفهوم |
|---|---|
| 1xx | اطلاعاتی |
| 2xx | موفقیت |
| 3xx | Redirect و تغییر مسیر |
| 4xx | خطای سمت Client |
| 5xx | خطای سمت Server |
مهمترین HTTP Status Codeها
200 OK
یعنی درخواست با موفقیت پردازش شده است.
HTTP/1.1 200 OK
201 Created
یعنی یک Resource جدید با موفقیت ایجاد شده است.
204 No Content
یعنی عملیات با موفقیت انجام شده اما Response Body محتوایی ندارد.
301 Moved Permanently
یعنی Resource به صورت دائمی به URL دیگری منتقل شده است. این Status Code در Redirectهای دائمی و سئو اهمیت زیادی دارد.
302 Found
برای Redirect استفاده میشود و رفتار آن با Redirect دائمی 301 متفاوت است.
400 Bad Request
یعنی Request ارسالشده معتبر نیست یا Server نمیتواند آن را به شکل صحیح پردازش کند.
401 Unauthorized
معمولاً زمانی استفاده میشود که احراز هویت موردنیاز انجام نشده یا اطلاعات احراز هویت معتبر نیست.
403 Forbidden
یعنی Server درخواست را دریافت کرده اما اجازه دسترسی به Resource را نمیدهد.
404 Not Found
یکی از معروفترین خطاهای وب است و نشان میدهد Resource موردنظر پیدا نشده است.
HTTP/1.1 404 Not Found
500 Internal Server Error
معمولاً نشاندهنده وجود یک مشکل در سمت Server یا Application است.
HTTP Headers چیست؟
HTTP Headerها اطلاعات اضافی درباره Request یا Response را منتقل میکنند.
برای مثال:
Content-Type: application/json
مشخص میکند که نوع داده ارسالشده JSON است.
یا:
Authorization: Bearer TOKEN
میتواند برای ارسال اطلاعات مربوط به احراز هویت استفاده شود.
برخی Headerهای رایج عبارتاند از:
HostContent-TypeContent-LengthAuthorizationAcceptUser-AgentCookieCache-ControlSet-CookieLocationOrigin
HTTP Body چیست؟
Body بخشی از Request یا Response است که میتواند داده اصلی را حمل کند.
برای مثال:
POST /api/products
Content-Type: application/json
{
"name": "Laptop",
"price": 1200
}
قسمت JSON در این مثال، Body درخواست است.
Body میتواند شامل انواع مختلفی از دادهها باشد، از جمله:
- JSON
- HTML
- XML
- Form Data
- فایلها و دادههای Binary
Cookie چیست و چه ارتباطی با HTTP دارد؟
HTTP به صورت ذاتی یک پروتکل Stateless است. یعنی هر Request به صورت مستقل از Requestهای قبلی در نظر گرفته میشود.
Cookieها یکی از مکانیزمهایی هستند که به وبسایتها اجازه میدهند اطلاعات مرتبط با Client را در تعاملات مختلف مدیریت کنند.
Server میتواند Cookie را با Header زیر ارسال کند:
Set-Cookie: session_id=abc123
مرورگر نیز در Requestهای بعدی، در صورت برقرار بودن شرایط Cookie، آن را ارسال میکند:
Cookie: session_id=abc123
سیستمهایی مانند Session و Login میتوانند از این مکانیزم برای حفظ وضعیت کاربر استفاده کنند.
HTTPS چیست و چه تفاوتی با HTTP دارد؟
یکی از مهمترین مفاهیم مرتبط با HTTP، HTTPS است.
HTTP به تنهایی ارتباط را رمزنگاری نمیکند. HTTPS در واقع HTTP را روی یک ارتباط امن مبتنی بر TLS اجرا میکند.
به صورت ساده:
HTTP
↓
TCP
↓
IP
در HTTPS:
HTTP
↓
TLS
↓
TCP
↓
IP
TLS برای محافظت از ارتباط در برابر شنود و دستکاری دادهها استفاده میشود.
به همین دلیل امروزه استفاده از HTTPS برای وبسایتها و سرویسهای آنلاین اهمیت بسیار زیادی دارد.
HTTP/1.1 چیست؟
HTTP/1.1 یکی از نسخههای مهم HTTP است که برای سالها پایه اصلی ارتباطات وب محسوب میشد.
یکی از قابلیتهای مهم HTTP/1.1، استفاده از ارتباطات Persistent است که اجازه میدهد یک اتصال برای چندین Request مورد استفاده قرار گیرد.
HTTP/2 چیست؟
HTTP/2 برای بهبود عملکرد ارتباطات وب توسعه داده شد.
یکی از قابلیتهای مهم HTTP/2، Multiplexing است. در این روش چندین Stream میتوانند روی یک Connection منتقل شوند.
HTTP/2 همچنین از Binary Framing و فشردهسازی Headerها استفاده میکند و میتواند در وبسایتهایی که تعداد زیادی Resource دارند، عملکرد مناسبی ارائه دهد.
HTTP/3 چیست؟
HTTP/3 نسل جدیدتری از HTTP است که از پروتکل انتقال QUIC استفاده میکند.
در حالی که HTTP/2 معمولاً روی TCP اجرا میشود، HTTP/3 از QUIC استفاده میکند که بر پایه UDP ساخته شده است.
به صورت ساده:
HTTP/1.1 → TCP
HTTP/2 → TCP + TLS
HTTP/3 → QUIC + UDP
هدف HTTP/3 بهبود عملکرد و کاهش برخی محدودیتهای ارتباطات مبتنی بر TCP، بهخصوص در شبکههایی با تغییرات زیاد در کیفیت اتصال است.
HTTP در APIها چه کاربردی دارد؟
HTTP فقط برای نمایش صفحات وب استفاده نمیشود. امروزه بخش بسیار بزرگی از ارتباط بین نرمافزارها نیز از HTTP استفاده میکند.
برای مثال یک Frontend میتواند درخواست زیر را به Backend ارسال کند:
GET /api/products
Backend نیز میتواند پاسخ زیر را ارسال کند:
{
"data": [
{
"id": 1,
"name": "Laptop",
"price": 1200
}
]
}
در چنین معماریای ممکن است فرآیند به شکل زیر باشد:
Frontend
↓
HTTP Request
↓
Backend API
↓
Database
↓
HTTP Response
↓
Frontend
به همین دلیل HTTP یکی از مفاهیم بنیادی برای توسعهدهندگان API و نرمافزارهای مدرن محسوب میشود.
HTTP در Laravel
اگر با Laravel کار میکنید، تقریباً تمام Routeها و APIهای برنامه شما در نهایت با HTTP سروکار دارند.
برای مثال:
Route::get('/products', [ProductController::class, 'index']);
این Route برای دریافت درخواستهای GET مربوط به مسیر /products استفاده میشود.
یا:
Route::post('/products', [ProductController::class, 'store']);
برای دریافت درخواستهای POST استفاده میشود.
در Controller نیز میتوان اطلاعات Request را دریافت کرد:
public function store(Request $request)
{
$name = $request->input('name');
// ...
}
و یک JSON Response ایجاد کرد:
return response()->json([
'message' => 'Product created'
], 201);
در این مثال Laravel یک HTTP Response با Status Code برابر با 201 ایجاد میکند.
چگونه HTTP Requestها را مشاهده کنیم؟
یکی از بهترین روشها برای یادگیری HTTP، مشاهده Requestهای واقعی در مرورگر است.
در Google Chrome یا Firefox میتوانید Developer Tools را باز کنید و وارد بخش Network شوید.
سپس صفحه را Reload کنید.
در این بخش اطلاعاتی مانند موارد زیر را مشاهده خواهید کرد:
- Request URL
- Request Method
- Status Code
- Request Headers
- Response Headers
- Payload
- Response
- Timing
برای مثال ممکن است اطلاعاتی مشابه زیر ببینید:
Request URL:
https://example.com/api/products
Request Method:
GET
Status Code:
200 OK
Content-Type:
application/json
با بررسی همین اطلاعات میتوانید به شکل عملی نحوه کار HTTP را درک کنید.
جمعبندی؛ HTTP چیست؟
اگر بخواهیم کل مقاله را در یک جمله خلاصه کنیم:
HTTP پروتکلی است که به Client و Server اجازه میدهد با ارسال Request و Response با یکدیگر ارتباط برقرار کنند.
HTTP یکی از پایهایترین مفاهیم توسعه وب است و تقریباً هر بار که یک صفحه وب باز میکنید، اطلاعاتی از یک API دریافت میکنید یا دادهای را به Server ارسال میکنید، این پروتکل در فرآیند ارتباط نقش دارد.
برای یادگیری بهتر HTTP بهتر است مفاهیم زیر را به خوبی بشناسید:
- HTTP Request و Response
- HTTP Methods
- HTTP Status Codes
- HTTP Headers
- HTTP Body
- Cookies و Sessions
- HTTPS و TLS
- HTTP/1.1
- HTTP/2
- HTTP/3
درک درست HTTP به شما کمک میکند هنگام کار با REST API، Laravel، PHP، JavaScript، React، Vue، Node.js، Microservices و معماری Client-Server بهتر بتوانید ارتباط بین بخشهای مختلف نرمافزار را درک و مشکلات آن را Debug کنید.
سوالات متداول درباره HTTP
HTTP چیست؟
HTTP مخفف HyperText Transfer Protocol و یک پروتکل ارتباطی برای تبادل اطلاعات بین Client و Server در وب است.
تفاوت HTTP و HTTPS چیست؟
HTTPS نسخه امن ارتباط HTTP است که از TLS برای محافظت از ارتباط و رمزنگاری دادههای منتقلشده استفاده میکند.
HTTP Request چیست؟
HTTP Request پیامی است که Client برای Server ارسال میکند و مشخص میکند چه Resource یا عملیاتی موردنظر است.
HTTP Response چیست؟
HTTP Response پاسخی است که Server پس از پردازش Request برای Client ارسال میکند و معمولاً شامل Status Code، Header و در بسیاری از موارد Body است.
GET و POST چه تفاوتی دارند؟
GET معمولاً برای دریافت اطلاعات استفاده میشود، در حالی که POST معمولاً برای ارسال داده یا ایجاد یک Resource جدید کاربرد دارد.
Status Code 404 چیست؟
Status Code 404 یعنی Server نتوانسته Resource موردنظر را پیدا کند.
Status Code 500 چیست؟
Status Code 500 نشاندهنده یک خطای داخلی در سمت Server یا Application است.
HTTP/2 و HTTP/3 چه تفاوتی دارند؟
HTTP/2 عمدتاً از TCP استفاده میکند، در حالی که HTTP/3 بر پایه QUIC ساخته شده است. HTTP/2 و HTTP/3 برای بهبود عملکرد و کارایی ارتباطات وب نسبت به نسلهای قدیمیتر HTTP طراحی شدهاند.