کدهای HTTP چیست؟ آشنایی با مهمترین کدهای وضعیت HTTP
اگر تا امروز با مدیریت سایت، وردپرس، هاست یا حتی عیبیابی یک مشکل ساده اینترنتی سروکار داشته باشید، احتمالاً با عددهایی مثل 200، 301، 404 یا 500 روبهرو شدهاید.
این عددها در نگاه اول شاید چندان مهم به نظر نرسند، اما اطلاعات خوبی درباره نتیجه یک درخواست HTTP به ما میدهند. مثلاً کد 200 معمولاً یعنی درخواست با موفقیت انجام شده، 404 یعنی چیزی در آدرس موردنظر پیدا نشده و 500 نشان میدهد سرور هنگام پردازش درخواست با خطایی مواجه شده است.
در این مطلب سراغ مهمترین HTTP Status Codeها میرویم و میبینیم هرکدام دقیقاً چه مفهومی دارند و در چه شرایطی دیده میشوند.
کد وضعیت HTTP چیست؟
هر بار که مرورگر، اپلیکیشن یا یک سرویس به یک وبسرور درخواست میفرستد، سرور در پاسخ یک کد وضعیت HTTP هم ارسال میکند.
این کد سهرقمی است و رقم اول آن مشخص میکند پاسخ در چه دستهای قرار میگیرد:
| دسته | مفهوم |
|---|---|
| 1xx | پاسخهای اطلاعاتی |
| 2xx | درخواست موفق |
| 3xx | تغییر مسیر یا اطلاعات مربوط به کش |
| 4xx | مشکل در درخواست یا دسترسی |
| 5xx | خطا در سمت سرور |
در ادامه مهمترین کدهایی را بررسی میکنیم که در کار روزمره با سایتها بیشتر از بقیه با آنها سروکار داریم.
کدهای 2xx؛ همه چیز طبق انتظار پیش رفته است
کدهای سری 2xx در حالت کلی نشان میدهند که درخواست با موفقیت پردازش شده است.
200 OK
کد 200 OK همان پاسخی است که در سادهترین حالت انتظار داریم.
مثلاً وقتی آدرس یک صفحه را باز میکنیم و سرور صفحه را بدون مشکل تحویل مرورگر میدهد، پاسخ آن درخواست معمولاً 200 است.
نمونه:
HTTP/1.1 200 OK
البته 200 فقط موفقیت درخواست HTTP را نشان میدهد و به این معنی نیست که حتماً محتوای صفحه از نظر سئو، سرعت یا کیفیت مشکلی ندارد.
201 Created
201 Created زمانی کاربرد دارد که در نتیجه یک درخواست، یک منبع جدید ایجاد شده باشد.
این کد بیشتر در APIها دیده میشود. برای مثال، اگر با یک درخواست POST رکورد جدیدی در یک سرویس ایجاد کنیم، سرور میتواند پاسخ 201 برگرداند.
204 No Content
کد 204 No Content یعنی درخواست با موفقیت انجام شده، اما چیزی برای قرار دادن در بدنه پاسخ وجود ندارد.
این وضعیت هم بیشتر در APIها و درخواستهایی دیده میشود که انجام یک عملیات را اعلام میکنند و لازم نیست محتوای دیگری برگردانند.
کدهای 3xx؛ وقتی مسیر درخواست تغییر میکند
کدهای 3xx بیشتر در دو موقعیت برای ما آشنا هستند: ریدایرکت و کش مرورگر.
301 Moved Permanently
کد 301 یعنی یک URL بهصورت دائمی به آدرس دیگری منتقل شده است.
مثلاً فرض کنید آدرس قدیمی یک مقاله این باشد:
https://example.com/old-page
و مقاله به این آدرس منتقل شده باشد:
https://example.com/new-page
در چنین شرایطی میتوان از ریدایرکت 301 استفاده کرد.
301 چه اهمیتی برای سئو دارد؟
ریدایرکت 301 یکی از ابزارهای مهم در مدیریت ساختار URL سایت است. هنگام تغییر آدرس صفحات، تغییر دامنه یا اصلاح ساختار سایت، اگر ریدایرکتها درست تنظیم شوند، کاربران و موتورهای جستجو راحتتر به URL جدید هدایت میشوند.
یک نکته مهم این است که برای همه تغییر مسیرها نباید بهصورت خودکار 301 استفاده کرد. اگر تغییر مسیر موقتی است، باید سناریوی مناسب آن را در نظر گرفت.
302 Found
302 Found معمولاً برای تغییر مسیر موقت استفاده میشود.
تفاوت ساده آن با 301 را میتوان اینطور خلاصه کرد:
- 301: انتقال دائمی
- 302: انتقال موقت
انتخاب بین این دو باید بر اساس هدف واقعی Redirect انجام شود، نه صرفاً بر اساس اینکه «صفحه فعلاً جای دیگری قرار دارد».
304 Not Modified
کد 304 Not Modified کمی با کدهای دیگر این فهرست فرق دارد.
این پاسخ معمولاً در ارتباط با کش HTTP دیده میشود. اگر مرورگر قبلاً نسخهای از یک فایل را داشته باشد، میتواند بررسی کند که آیا آن فایل از زمان دریافت قبلی تغییر کرده است یا نه.
اگر فایل تغییر نکرده باشد، سرور میتواند 304 برگرداند تا مرورگر از نسخه موجود در کش استفاده کند.
بنابراین:
304 یک خطا نیست.
این کد بخشی از سازوکار معمول کش HTTP است و میتواند به کاهش انتقال داده کمک کند.
کدهای 4xx؛ مشکل از درخواست یا دسترسی است
وقتی با کدهای 4xx روبهرو میشویم، معمولاً باید درخواست ارسالشده، URL، اطلاعات احراز هویت و مجوزهای دسترسی را بررسی کنیم.
البته این به آن معنی نیست که علت تمام خطاهای 4xx الزاماً کاربر است. تنظیمات وبسرور، فایروال و ابزارهای امنیتی هم میتوانند چنین پاسخهایی ایجاد کنند.
400 Bad Request
400 Bad Request یعنی سرور نتوانسته درخواست دریافتشده را به شکل قابل قبول پردازش کند.
چند علت متداول:
- پارامترهای اشتباه
- دادههای ناقص
- ساختار نامعتبر درخواست
- Headerهای نامناسب
- ارسال دادهای که سرویس انتظارش را ندارد
در APIها معمولاً باید Request و پارامترهای آن را بررسی کرد تا علت دقیق مشخص شود.
401 Unauthorized
کد 401 Unauthorized معمولاً زمانی دیده میشود که برای دسترسی به یک منبع، احراز هویت لازم است یا اطلاعات احراز هویت معتبر نیست.
مثلاً یک API ممکن است انتظار داشته باشد توکن در Header ارسال شود:
Authorization: Bearer TOKEN
اگر توکن وجود نداشته باشد یا اعتبار آن مشکل داشته باشد، ممکن است پاسخ 401 دریافت شود.
تفاوت 401 و 403 چیست؟
این دو کد خیلی وقتها با هم اشتباه گرفته میشوند:
- 401: درخواست به احراز هویت معتبر نیاز دارد.
- 403: سرور دسترسی به منبع را مجاز نمیداند.
403 Forbidden
403 Forbidden یعنی سرور درخواست را دریافت کرده، اما اجازه دسترسی به منبع موردنظر را نمیدهد.
در یک سایت واقعی، علت میتواند چیزهای مختلفی باشد؛ مثلاً:
- مجوز اشتباه فایل یا پوشه
- محدودیت IP
- قوانین فایروال
- ModSecurity
- تنظیمات Nginx یا Apache
- محدودیتهای امنیتی
- دسترسی نداشتن کاربر به یک بخش خاص
در وردپرس هم ممکن است 403 هنگام ورود به پنل مدیریت یا ارسال درخواستهای AJAX دیده شود.
404 Not Found
احتمالاً 404 شناختهشدهترین خطای HTTP برای کاربران عادی است.
وقتی سرور منبعی را در URL درخواستشده پیدا نکند، معمولاً پاسخ 404 برمیگرداند.
برای مثال:
https://example.com/page-not-found
اگر چنین صفحهای در سایت وجود نداشته باشد، پاسخ میتواند:
HTTP/1.1 404 Not Found
باشد.
چرا 404 ایجاد میشود؟
دلایل مختلفی دارد:
- URL اشتباه وارد شده است.
- صفحه حذف شده است.
- آدرس صفحه تغییر کرده است.
- لینک داخلی سایت اشتباه است.
- Rewrite یا Route درست کار نمیکند.
- فایل موردنظر وجود ندارد.
آیا 404 برای سئو بد است؟
نه لزوماً.
وجود بعضی URLهای 404 در هر سایت کاملاً طبیعی است. مثلاً صفحهای که واقعاً حذف شده و دیگر جایگزین ندارد، ممکن است بهدرستی 404 برگرداند.
مشکل زمانی جدیتر میشود که یک صفحه مهم سایت بهاشتباه 404 شود یا تعداد زیادی لینک داخلی به صفحات 404 اشاره کنند.
پس صرف دیدن چند خطای 404 در گزارشها، دلیل کافی برای نگرانی نیست؛ باید بررسی کرد این خطاها مربوط به چه URLهایی هستند.
429 Too Many Requests
کد 429 Too Many Requests زمانی استفاده میشود که یک کلاینت در مدت کوتاهی درخواستهای زیادی ارسال کرده باشد.
این وضعیت معمولاً با Rate Limiting ارتباط دارد.
برای مثال، یک API ممکن است محدودیت زیر را داشته باشد:
100 requests per minute
اگر برنامهای بیشتر از این مقدار درخواست ارسال کند، سرویس میتواند پاسخ 429 بدهد.
علتهای احتمالی:
- درخواست زیاد به API
- اسکریپت یا ربات با نرخ بالا
- Rate Limit سرویس
- ترافیک غیرعادی
- تنظیمات امنیتی
گاهی سرور همراه با 429، Headerای به نام Retry-After هم ارسال میکند تا زمان مناسب برای تلاش مجدد را مشخص کند.
کدهای 5xx؛ سرور به مشکل خورده است
کدهای سری 5xx معمولاً زمانی دیده میشوند که در سمت سرور یا یکی از سرویسهایی که سرور برای پاسخگویی به آنها وابسته است مشکلی ایجاد شده باشد.
500 Internal Server Error
500 Internal Server Error یک خطای عمومی سمت سرور است.
این کد بهتنهایی نمیگوید مشکل دقیقاً کجاست. ممکن است علت یک خطای PHP، مشکل برنامه، تنظیمات اشتباه یا یک سرویس داخلی باشد.
در وردپرس، برای مثال، یک افزونه یا قالب دارای خطای PHP میتواند باعث ایجاد 500 شود.
برای پیدا کردن علت واقعی باید Logها را بررسی کرد؛ مثلاً:
- Error Log وبسرور
- PHP Error Log
- Log خود برنامه
- Logهای سرویسهای Backend
502 Bad Gateway
502 Bad Gateway معمولاً در ساختارهایی دیده میشود که یک Proxy یا Gateway بین کاربر و سرویس اصلی قرار دارد.
مثلاً:
Browser
↓
Nginx
↓
PHP-FPM / Application
اگر Nginx نتواند از سرویس پشت خود پاسخ معتبر بگیرد، ممکن است 502 نمایش داده شود.
چند علت رایج:
- سرویس Backend خاموش است.
- پورت اشتباه است.
- سرویس روی IP یا Socket دیگری Listen میکند.
- ارتباط Proxy با Backend مشکل دارد.
- سرویس Backend Crash کرده است.
بنابراین وقتی 502 میبینیم، فقط خود Nginx را بررسی نکنیم؛ باید Upstream را هم بررسی کنیم.
503 Service Unavailable
کد 503 Service Unavailable یعنی سرویس در حال حاضر نمیتواند درخواست را پردازش کند.
این وضعیت میتواند موقتی باشد.
مثلاً:
- سرور در حال تعمیر است.
- سرویس Backend در دسترس نیست.
- منابع سیستم بهشدت درگیر هستند.
- برنامه عمداً درخواستها را موقتاً رد میکند.
در برخی موارد، سرور با پاسخ 503 مقدار Retry-After را هم ارسال میکند.
504 Gateway Timeout
504 Gateway Timeout زمانی رخ میدهد که یک Gateway یا Proxy منتظر پاسخ سرویس بالادستی مانده، اما پاسخ در زمان تعیینشده دریافت نشده است.
یک زنجیره معمول را در نظر بگیرید:
Browser
↓
Cloudflare / Nginx
↓
Web Server
↓
Application
↓
Database
اگر پردازش در یکی از لایههای پایینتر بیش از حد طول بکشد، ممکن است Gateway در نهایت 504 برگرداند.
علت میتواند مثلاً این موارد باشد:
- Query سنگین دیتابیس
- پردازش طولانی برنامه
- مشکل شبکه
- Timeout نامناسب
- بار زیاد روی سرور
- پاسخ ندادن سرویس Backend
تفاوت 500، 502، 503 و 504
این چهار کد در عیبیابی سرور زیاد دیده میشوند و تشخیص تفاوتشان کمک میکند سریعتر سراغ بخش درست برویم.
| کد | معنی ساده | معمولاً چه چیزی را بررسی کنیم؟ |
|---|---|---|
| 500 | خطای داخلی سرور | Log برنامه و وبسرور |
| 502 | Gateway پاسخ معتبر نگرفته | وضعیت و اتصال به Upstream |
| 503 | سرویس فعلاً در دسترس نیست | وضعیت سرویس و منابع |
| 504 | Gateway منتظر پاسخ مانده و Timeout شده | زمان پردازش و ارتباط با Upstream |
این جدول یک راهنمای اولیه است؛ برای تشخیص قطعی همیشه باید Logها و معماری واقعی سرویس را بررسی کرد.
جدول کامل کدهای مهم HTTP
| کد | نام | دسته | معنی |
|---|---|---|---|
| 200 | OK | 2xx | درخواست موفق |
| 201 | Created | 2xx | منبع جدید ایجاد شده |
| 204 | No Content | 2xx | درخواست موفق، بدون محتوای پاسخ |
| 301 | Moved Permanently | 3xx | انتقال دائمی |
| 302 | Found | 3xx | انتقال موقت |
| 304 | Not Modified | 3xx | منبع نسبت به نسخه قبلی تغییر نکرده |
| 400 | Bad Request | 4xx | درخواست نامعتبر |
| 401 | Unauthorized | 4xx | احراز هویت لازم یا نامعتبر است |
| 403 | Forbidden | 4xx | دسترسی مجاز نیست |
| 404 | Not Found | 4xx | منبع پیدا نشد |
| 429 | Too Many Requests | 4xx | تعداد درخواستها بیش از حد مجاز است |
| 500 | Internal Server Error | 5xx | خطای داخلی سرور |
| 502 | Bad Gateway | 5xx | دریافت پاسخ معتبر از Upstream با مشکل مواجه شده |
| 503 | Service Unavailable | 5xx | سرویس فعلاً در دسترس نیست |
| 504 | Gateway Timeout | 5xx | Gateway بهموقع پاسخ Upstream را دریافت نکرده |
چطور کد HTTP یک سایت را ببینیم؟
برای بررسی Status Code یک سایت لازم نیست حتماً ابزار پیچیدهای داشته باشید.
بررسی با مرورگر
در Chrome، Chromium، Edge و Firefox میتوان Developer Tools را باز کرد و از بخش Network درخواستهای صفحه را دید.
معمولاً با فشردن:
F12 → Network
و سپس Refresh کردن صفحه، فهرست Requestها نمایش داده میشود.
در ستون Status میتوان کدهایی مثل 200، 301، 304 یا 404 را دید.
بررسی با curl
اگر به ترمینال دسترسی دارید، curl یکی از سادهترین ابزارها برای بررسی Header پاسخ است:
curl -I https://example.com/
اگر بخواهید Redirectها هم دنبال شوند:
curl -I -L https://example.com/
برای بررسی همزمان کد HTTP و زمان پاسخ نیز میتوان از این دستور استفاده کرد:
curl -I -L -w "\nHTTP: %{http_code}\nTTFB: %{time_starttransfer}s\nTOTAL: %{time_total}s\n" https://example.com/
این دستور برای عیبیابی سایتهایی که با Nginx، Apache، LiteSpeed، Reverse Proxy یا سرویسهای Backend کار میکنند بسیار مفید است.
کدهای HTTP چه ارتباطی با سئو دارند؟
کدهای HTTP بخشی از Technical SEO هستند، اما نباید درباره آنها بیش از حد سادهسازی کرد.
چند نکته مهم:
صفحات اصلی سایت نباید به اشتباه 404 یا 5xx باشند
اگر یک صفحه مهم سایت بهجای محتوای اصلی، خطای 404 یا خطای سمت سرور بدهد، دسترسی کاربران و خزندههای موتور جستجو به آن صفحه دچار مشکل میشود.
Redirectها را بیدلیل زنجیرهای نکنید
مثلاً بهتر است:
URL A → URL C
بهجای این باشد:
URL A → URL B → URL C
البته ساختار واقعی سایت تعیین میکند چه Redirectهایی لازم هستند.
404های واقعی را از خطاهای پیکربندی جدا کنید
وجود یک صفحه حذفشده که 404 برمیگرداند با این وضعیت که صفحه اصلی یک محصول یا مقاله بهاشتباه 404 شده، یکسان نیست.
خطاهای 5xx را بررسی کنید
اگر خطاهای 500، 502، 503 یا 504 بهصورت مداوم رخ میدهند، باید علت فنی آنها پیدا شود. این خطاها میتوانند نشانه مشکل در برنامه، وبسرور، منابع سیستم یا سرویسهای Upstream باشند.
جمعبندی
اگر بخواهیم همه این کدها را خیلی ساده به خاطر بسپاریم، میتوانیم آنها را اینطور دستهبندی کنیم:
2xx → درخواست موفق
3xx → تغییر مسیر یا وضعیت مرتبط با کش
4xx → مشکل در درخواست یا دسترسی
5xx → مشکل در سمت سرور
و چند کد پرکاربردتر:
200 → OK
301 → انتقال دائمی
302 → انتقال موقت
304 → تغییر نکرده / استفاده از کش
400 → درخواست نامعتبر
401 → نیاز به احراز هویت
403 → دسترسی ممنوع
404 → منبع پیدا نشد
429 → درخواست بیش از حد
500 → خطای داخلی سرور
502 → مشکل در دریافت پاسخ از Upstream
503 → سرویس در دسترس نیست
504 → Timeout در Gateway
اگر مدیر سایت یا سرور هستید، فقط حفظ کردن این اعداد کافی نیست. نکته مهمتر این است که بدانید بعد از دیدن هر کد، کدام بخش را باید بررسی کنید. مثلاً برای 404 معمولاً باید URL و Rewriteها را بررسی کرد، اما برای 502 بهتر است وضعیت سرویس Upstream و ارتباط آن با Proxy بررسی شود.
سوالات متداول
کد HTTP 200 یعنی چه؟
یعنی درخواست با موفقیت پردازش شده و سرور پاسخ موفقی ارسال کرده است.
خطای 404 چیست؟
404 یعنی سرور منبع موردنظر را در URL درخواستشده پیدا نکرده است.
تفاوت 301 و 302 چیست؟
301 برای انتقال دائمی و 302 معمولاً برای انتقال موقت استفاده میشود.
آیا 304 یک خطا است؟
خیر. 304 معمولاً بخشی از فرایند HTTP Caching است و یعنی منبع نسبت به نسخه موجود در اختیار کلاینت تغییر نکرده است.
تفاوت 401 و 403 چیست؟
401 معمولاً به احراز هویت مربوط است؛ 403 یعنی دسترسی به منبع مجاز نیست.
خطای 502 چیست؟
502 معمولاً زمانی رخ میدهد که یک Gateway یا Reverse Proxy نتواند از سرویس Upstream پاسخ معتبر دریافت کند.
تفاوت 502 و 504 چیست؟
در 502 دریافت پاسخ معتبر از Upstream با مشکل مواجه شده است؛ در 504، Gateway در انتظار پاسخ Upstream مانده اما زمان مجاز تمام شده است.
خطای 500 را چطور پیدا کنیم؟
خود کد 500 علت دقیق را مشخص نمیکند. برای پیدا کردن دلیل آن باید Error Log وبسرور، PHP یا برنامه بررسی شود.