کدهای 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 یا برنامه بررسی شود.