فهرست مطالب
وقتی درخواستی از مرورگر یا کلاینت به سرور ارسال میکنید و با صفحه سفید، پیام خطا یا داده ناقص روبهرو میشوید، اولین ابزار برای فهمیدن اتفاقی که افتاده است، کد وضعیت HTTP نام دارد. مرورگر بدون خواندن متن پاسخ، از روی همین عدد سهرقمی متوجه میشود که آیا درخواست موفق بوده، صفحه جابهجا شده یا سرور دچار مشکل داخلی است.
اگر در زمان ساخت API یا ارسال درخواست با Fetch و Axios این کدها را نشناسید، خطایابی برنامه ساعتها طول میکشد یا کلاینت رفتاری اشتباه نشان میدهد.
دستهبندی پنجگانه کدهای وضعیت در استاندارد وب
طبق استاندارد RFC ۹۱۱۰ کدهای وضعیت HTTP به پنج رده اصلی تقسیم میشوند. رقم اول مشخصکننده طبقه پاسخ است و دو رقم بعدی جزئیات دقیقتری ارائه میدهند:
۱. رده ۱۰۰ (اطلاعاتی): به کلاینت اعلام میکند که بخش ابتدایی درخواست دریافت شد و پردازش ادامه دارد (مانند ۱۰۰ Continue).
۲. رده ۲۰۰ (موفقیت): سرور درخواست را با موفقیت دریافت و پردازش کرد و پاسخ مورد نظر را برمیگرداند.
۳. رده ۳۰۰ (هدایت مجدد یا ریدایرکت): کلاینت برای دریافت محتوا باید به آدرس دیگری مراجعه کند یا از نسخه ذخیرهشده کش بهره ببرد.
۴. رده ۴۰۰ (خطای کلاینت): اشکال در درخواستی است که فرستادهاید؛ مثل آدرس نادرست، داده ناقص یا نداشتن دسترسی.
۵. رده ۵۰۰ (خطای سرور): درخواست کلاینت مشکلی نداشته اما سرور در حین پردازش با نقص، کرش یا عدم پاسخگویی مواجه شده است.
مفهوم کدهای پرتکرار در برنامهنویسی وب
در توسعه روزمره بیشتر با چند کد مشخص سر و کار دارید:
- کد ۲۰۰ (OK): رایجترین پاسخ برای درخواستهای موفق GET یا POST است. یعنی منبع پیدا شد و در بدنه پاسخ قرار دارد.
- کد ۲۰۱ (Created): درخواست معمولاً از نوع POST بوده و یک منبع جدید با موفقیت روی پایگاه داده ساخته شده است.
- کد ۲۰۴ (No Content): عملیات با موفقیت انجام شده اما محتوایی برای بازگرداندن در بدنه پاسخ وجود ندارد، مثل عملیات حذف منبع.
- کد ۳۰۱ و ۳۰۸ (انتقال دائم): آدرس صفحه بهطور همیشگی تغییر کرده است. در ۳۰۸ متد درخواست تغییر نمیکند.
- کد ۴۰۰ (Bad Request): فرمت داده ارسالی اشتباه است یا پارامترهای اجباری ارسال نشدهاند.
- کد ۴۰۱ و ۴۰۳: کد ۴۰۱ نشان میدهد کاربر احراز هویت نشده است، در حالی که ۴۰۳ یعنی هویت کاربر مشخص است اما اجازه دسترسی به این منبع خاص را ندارد.
- کد ۴۰۴ (Not Found): آدرس درخواستی روی سرور وجود ندارد.
- کد ۵۰۰ (Internal Server Error): کد سرور با استثنا یا خطای مدیریتنشده روبهرو شده است.
- کد ۵۰۲ و ۵۰۳: سرویس پشتیبان پاسخ نداده یا سرور به دلیل بار کاری زیاد در دسترس نیست.
نمونه عملی بررسی کد وضعیت در جاوااسکریپت
هنگام استفاده از توابع دریافت داده مثل fetch در فرانتاند، خطاهای رده ۴۰۰ و ۵۰۰ بهطور خودکار رد (Reject) نمیشوند. شما باید ویژگی response.status یا response.ok را بررسی کنید:
javascriptasync function fetchUserData(userId) {
try {
const response = await fetch(`https://api.example.com/users/${userId}`);
// بررسی موفق بودن در رده ۲۰۰ تا ۲۹۹
if (response.status === ۲۰۰) {
const data = await response.json();
console.log('اطلاعات کاربر:', data);
return data;
}
// مدیریت منبع یافتنشده
if (response.status === ۴۰۴) {
console.warn('کاربر مورد نظر پیدا نشد.');
return null;
}
// مدیریت خطای داخلی سرور
if (response.status === ۵۰۰) {
console.error('سرور در پردازش درخواست دچار خطا شد.');
return null;
}
console.error(`خطای ناشناخته با کد وضعیت: ${response.status}`);
return null;
} catch (error) {
// خطای شبکه یا قطع ارتباط
console.error('عدم برقراری ارتباط با سرور:', error);
}
}
اگر سرور برای کاربری که وجود ندارد پاسخ ۴۰۴ برگرداند، بلوک شرطی وضعیت ۴۰۴ اجرا میشود و کاربر پیام متناسب دریافت میکند، بدون اینکه برنامه کرش کند.
اشتباه رایج در بازگرداندن کدهای وضعیت
بزرگترین اشتباه برنامهنویسان بکاند، بازگرداندن کد ۲۰۰ همراه با پیام خطا در بدنه پاسخ است؛ برای نمونه پاسخی با وضعیت ۲۰۰ که متنش این است: {"error": "User not found"}. این کار سیستمهای کش، ابزارهای مانیتورینگ و کلاینتها را به اشتباه میاندازد.
اشتباه دیگر، استفاده از کد ۵۰۰ برای ورودیهای نامعتبر کاربر است. اگر کاربر رمز عبور را کوتاه وارد کرد، باید کد ۴۰۰ یا ۴۲۲ برگردد نه ۵۰۰، چون سرور سالم کار میکند و داده ورودی اشکال دارد.
قدم بعدی برای درک بهتر تبادل داده
برای اینکه جریان داده بین مرورگر و سرور را کامل کنترل کنید، علاوه بر کدهای وضعیت باید هدرها، کوکیها و روشهای ارسال درخواست ناهمگام را یاد بگیرید. در دوره جاوااسکریپت از صفر تا برنامهنویس نحوه ساخت درخواستهای تحت وب، مدیریت پاسخها و خطایابی شبکه را بهصورت عملی تمرین میکنید.




نظرها
اولین نفری باشید که نظر میدهدسؤالتان را بپرسید یا تجربهتان را بنویسید تا نویسندهی مطلب پاسخ بدهد.