کدهای وضعیت HTTP یا HTTP status codes از اعداد سه رقمی تشکیل شده اند که نتیجه درخواست یک کلاینت مانند ربات موتور جست و جو و مرورگر را نمایش می دهند. در واقع این کدها پاسخی هستند که توسط سرور ارسال شده و به کلاینت اطلاع می دهند که آیا درخواستی که ارسال کردند موفقیت آمیز بوده و یا خطایی رخ داده است؟
کدهای وضعیت HTTP به صورت کلی به پنج دسته پاسخ های موفق، پاسخ هایی که شامل اطلاعات هستند، تغییر مسیرها، خطاهای سمت سرور و خطاهای سمت کلاینت تقسیم می شوند. هر دسته شامل تعداد مختلفی از پاسخ ها است که در ادامه مطلب به بررسی تمامی کدهای وضعیت HTTP می پردازیم.
1. کدهای 1xx اطلاعاتی (Informational)
کدهای 1xx یکی از انواع کدهای وضعیت HTTP، به این معنی است که درخواست کاربر دریافت و درک شده. این کد به صورت موقت ارسال می شود درحالی که پردازش هنوز ادامه دارد. در نتیجه کلاینت باید منتظر اتمام پردازش و دریافت پاسخ نهایی باشد.
| کدهای وضعیت HTTP | توضیح |
| 100 | Continue – درخواست اولیه دریافت شد، ادامه دهید. |
| 101 | Switching Protocols – در حال تغییر پروتکل ارتباطی. |
| 102 | Processing – درخواست در حال پردازش است. |
| 103 | Early Hints – برای ارسال زودهنگام هدرها استفاده می شود. |

2. کدهای ۲xx موفقیت آمیز (Successful)
کدهای ۲xx نشان می دهد که درخواست (Request) کاربر با موفقیت دریافت، درک، و پذیرفته شده است. در واقع سرور توانسته درخواست کاربر مانند اجرای دستور، ارسال داده یا هر درخواست دیگری را انجام دهد.
| کدهای وضعیت HTTP | توضیح |
| 200 | OK – درخواست با موفقیت انجام شد. |
| 201 | Created – منبع جدیدی ایجاد شد. |
| 202 | Accepted – درخواست پذیرفته شد ولی هنوز انجام نشده است. |
| 203 | Non-Authoritative Information – اطلاعات از منبع غیر اصلی. |
| 204 | No Content – پاسخ بدون محتوا. |
| 205 | Reset Content – کلاینت باید محتوا را ریست کند. |
| 206 | Partial Content – بخشی از داده ارسال شده است. |
| 207 | Multi-Status – چند وضعیت مختلف در پاسخ (WebDAV). |
| 208 | Already Reported – آیتم ها قبلاً گزارش شده اند. |
| 226 | IM Used – سرور پاسخ را با تبدیل خاصی برگردانده است. |

3. کدها ۳xx تغییر مسیر (Redirection)
کدهای 3xx نشان می دهد که کلاینت مانند مرورگر، باید اقدام اضافه ای انجام دهد تا درخواستی که ارسال کرده کامل شود. در واقع سرور درخواست کاربر را فهمیده اما پاسخ نهایی در جای دیگری قرار گرفته و کاربر برای رسیدن به پاسخ نهایی باید آدرس جدید را دنبال کند که همان redirect می شود.
اگر با مدیریت محتوا و بکند کار کرده باشید حتما با ریدایرکت (redirect ) آشنایی دارید. زمانی که این درخواست ارسال می شود، مرورگر در صورتی به صورت خودکار به آدرس جدید منتقل می شود که درخواست از نوع GET و HEAD باشد. برای دیگر متدها مانند POST, PUT, DELETE, PATCH به صورت خودکار منتقل نمی شود. در صورتی که ریدایرکت به صورت حلقه ای بی نهایت باشد، مرورگر به صورت خودکار فرایند را متوقف می کند.
| کدهای وضعیت HTTP | توضیح |
| 300 | Multiple Choices – چند گزینه موجود است و کاربر باید انتخاب کند. |
| 301 | Moved Permanently – صفحه برای همیشه منتقل شده است. |
| 302 | Found – تغییر مسیر موقت. |
| 303 | See Other – پاسخ در آدرس دیگری است. |
| 304 | Not Modified – محتوا تغییری نکرده (کش معتبر). |
| 305 | Use Proxy – برای دسترسی باید از پروکسی استفاده شود. |
| 306 | (Unused) – استفاده نمی شود. |
| 307 | Temporary Redirect – تغییر مسیر موقت بدون تغییر متد. |
| 308 | Permanent Redirect – تغییر مسیر دائم بدون تغییر متد. |

4. کدهای ۴xx خطای کاربر (Client Error)
کدهای وضعیت ۴xx زمانی نمایش داده می شوند که خطا از سمت کلاینت مانند مرورگر باشد و از سمت سرور نیست. وقتی با این خطا مواجه می شوید، باید در پاسخ (Response Body) توضیح دهد که چه خطایی رخ داده و آیا این خطا دائمی هست و یا موقتی ایجاد شده؟ فقط در حالتی که درخواست از نوع HEAD باشد، پاسخ نباید بدنه (body) داشته باشد.
کدهای وضعیت 4xx ممکن است در پاسخ به هر نوع متد HTTP (GET، POST، PUT، DELETE، …) بازگردانده شوند. قطعا به صفحه معروف “404 Not Found” برخورد کرده این که نشان می دهد چنین آدرسی در سایت یا وجود ندارد و یاد حذف شده است. البته طراح سایت معمولا این برگه را به دلخواه خود ادیت می کند ولی پیام 404 به وضوح در آن مشخص است.
| کدهای وضعیت HTTP | توضیح |
| 400 | Bad Request – درخواست اشتباه یا نامعتبر است. |
| 401 | Unauthorized – نیاز به احراز هویت دارد. |
| 402 | Payment Required – رزرو شده برای پرداخت. |
| 403 | Forbidden – دسترسی ممنوع است. |
| 404 | Not Found – منبع یافت نشد. |
| 405 | Method Not Allowed – متد HTTP مجاز نیست. |
| 406 | Not Acceptable – محتوا قابل قبول نیست. |
| 407 | Proxy Authentication Required – نیاز به احراز هویت پروکسی. |
| 408 | Request Timeout – زمان درخواست تمام شده است. |
| 409 | Conflict – تداخل در پردازش درخواست. |
| 410 | Gone – منبع دیگر وجود ندارد. |
| 411 | Length Required – طول محتوا مشخص نشده است. |
| 412 | Precondition Failed – پیش شرط ها برآورده نشده اند. |
| 413 | Payload Too Large – داده بیش از حد بزرگ است. |
| 414 | URI Too Long – آدرس خیلی طولانی است. |
| 415 | Unsupported Media Type – نوع داده پشتیبانی نمی شود. |
| 416 | Range Not Satisfiable – محدوده درخواست نامعتبر است. |
| 417 | Expectation Failed – انتظار مورد نظر برآورده نشد. |
| 418 | I’m a Teapot – شوخی (RFC 2324). |
| 421 | Misdirected Request – درخواست به سرور اشتباه ارسال شده. |
| 422 | Unprocessable Entity – داده ها قابل پردازش نیستند. |
| 423 | Locked – منبع قفل شده است. |
| 424 | Failed Dependency – وابستگی شکست خورده است. |
| 425 | Too Early – درخواست زود ارسال شده است. |
| 426 | Upgrade Required – نیاز به ارتقای پروتکل دارد. |
| 428 | Precondition Required – شرط لازم تعیین نشده است. |
| 429 | Too Many Requests – درخواست بیش از حد مجاز. |
| 431 | Request Header Fields Too Large – هدرها بیش از حد بزرگ اند. |
| 451 | Unavailable For Legal Reasons – به دلایل قانونی مسدود شده است. |

5. کدهای ۵xx خطای سرور (Server Error)
کدهای وضعیت ۵xx نشان می دهد که سرور متوجه خطایی شده و یا به هر دلیلی قادر به انجام درخواست کلاینت نیست. در واقع درخواست کاربر از نظر ساختاری مشکلی نداره ولی سرور هنگام پردازش آن دچار خطا شده است.
مطالب پیشنهادی
به جز درخواست های متد HEAD، سرور در response body توضیح در مورد خطا ارسال کرده و مشخص می کند که آیا این خطا به صور موقتی است (مثلا زمانی که بار زیادی روی سرور است) و یا به صورت دائمی ایجاد شده؟ (مثلا به علت کانفیگ اشتباه و یا ایرادات جدی تر). احتمالا با صفحه خطای معروف “500 Internal Server Error” مواجه شده اید.
| کدهای وضعیت HTTP | توضیح |
| 500 | Internal Server Error – خطای عمومی سرور. |
| 501 | Not Implemented – قابلیت پشتیبانی نمی شود. |
| 502 | Bad Gateway – پاسخ نامعتبر از سرور واسط. |
| 503 | Service Unavailable – سرویس در دسترس نیست. |
| 504 | Gateway Timeout – سرور واسط زمان پاسخ را از دست داده. |
| 505 | HTTP Version Not Supported – نسخه HTTP پشتیبانی نمی شود. |
| 506 | Variant Also Negotiates – خطای پیکربندی در سرور. |
| 507 | Insufficient Storage – فضای کافی وجود ندارد. |
| 508 | Loop Detected – حلقه بی پایان در پردازش. |
| 510 | Not Extended – نیاز به افزونه های بیشتر. |
| 511 | Network Authentication Required – نیاز به احراز هویت شبکه. |

کدهای وضعیت HTTP چه کاربرد دارد؟
کدهای وضعیت HTTP یا HTTP status codes بیشتر استفاده را برای مرورگرها دارد. چون در هنگام دریافت هر کد، مرورگر می داند باید چه پیامی نمایش دهد یا چه کاری را انجام دهد. مثلا خطای 404 را نمایش دهد یا به آدرس جدید با کد ریدایرکت 301 منتقل شود؟
کدهای وضعیت HTTP برای برنامه نویسان و توسعه دهندگان بکند و مدیران سیستم مانند متخصصان DevOps اهمیت زیادی دارد. هر کد می تواند مشخص کند که آیا برنامه ای نوشته ایم به درستی کار میکند؟ درخواست های کاربر به درستی مدیریت می شود و کدها درستی دریافت می شود و یا سرور نسبت به درخواست ها چه کدهایی را نمایش می دهد؟

همچنین برای پشتیبانی سرورها و رفع خطا نیز این کدها نقش تعیین کننده ای دارند و به مدیر سیستم اطلاع می دهند که مدام بخش دچار مشکل شده و فرایند رفع آن را سریع و دقیق تر می کنند.
در نهایت کدهای وضعیت HTTP می تواند برای مانیتورینگ و تست خودکار سرورها نیز مفید باشد. در مانیتورینگ سرور میتوان هشدارهایی را تعریف کرد که در صورت دریافت کدهای ۵xx، پشتیبان را مطلع کند و گزارش ها ثبت شود.
از مستندات RFC استفاده کنیم؟
RFC مخفف Request For Comments است و به مستندات استاندارد اینترنت گفته می شود. این مستندات توسط IETF (Internet Engineering Task Force) و دیگر گروه های مرتبط منتشر می شوند و هدفشان ارائهٔ مشخصات فنی، پروتکل ها، استانداردها، یا پیشنهادات بهبود اینترنت و شبکه ها است.
اطلاعاتی که در این مقاله در مورد کدهای وضعیت HTTP مشاهده کردید، چکیده ای کاربردی از مستندات RFC است که شمارا با این کدها و علت مشاهده هرکدام آشنا می کند. در صورتی که مشتاق یادگیری مفاهیم بیشتر و بسیار جزئی تر از کدهای وضعیت HTTP هستید، به آدرس در لینک شماره 1 و لینک شماره 2 مراجعه کنید.
نتیجه گیری
دانستن کدهای وضعیت HTTP برای هر توسعه دهنده و یا مدیر سرور می تواند بسیار مفید و از الزامات کار است. حتی امروزه کاربران نیز نسبت به قبل دید فنی تری به مرورگر و آنچه در آن اتفاق میفتد دارند و دید کلی نسبت به این کدها و بخ خصوص کدهای 4xx میتواند آنها برای درک خطا کمک کند. همچنین این دانش میتواند زبان مشترکی میان کاربر و پشتیبان سرور باشد تا سریع تر مشکل را کشف و آن را رفع کند.