زمانی که سایتی را باز می‌کنیم اما تمام صفحه یا بخشی از آن به دلیل وجود خطاهای مختلف به درستی بارگذاری و نمایش داده نمی‌شود، می‌توان با توجه به کد خطا و کد وضعیت یا کد پاسخ، متوجه شد که اشکال در کدام قسمت رخ داده است؟ سرور و هاست سایت یا مرورگر کاربر و یا آدرس و سبک استفاده‌ی کاربر از سایت؟

به عنوان مثال کد خطای ۴۰۴ به این معنی است که صفحه یا محتوای درخواستی وجود ندارد و کد ۲۰۰ نیز به معنی پاسخ کامل و صحیح به درخواست ارسال شده توسط مرورگر کاربر است.

در ادامه با کدهای مختلف پاسخ درخواست‌های مرورگر که توسط سرور وب‌سایت‌ها داده می‌شود، می‌پردازیم و معنا و مفهوم هر یک را بررسی می‌کنیم.

آشنایی با کد وضعیت یا Status Code در ارتباطات مبتنی بر پروتکل HTTP

پروتکل HTTP یکی از پروتکل‌های ساده و کاربردی برای ارتباط مبتنی بر TCP/IP است که به وفور در دنیای اینترنت استفاده می‌شود. مرورگر اینترنت نقش کلاینت HTTP‌ را بازی می‌کند و سرور و هاست سایت‌ها نیز نقش سرور HTTP را ایفا می‌کنند و داده بین این دو مبادله می‌شود. برای هر درخواست یا Request یک پاسخ یا Response وجود دارد و زمانی که یک صفحه‌ی وب را باز می‌کنیم، ممکن است چند ده درخواست برای سرور سایت ارسال شود و فایل‌های مختلف عکس، جاوااسکریپت و CSS و … دانلود شود. در پاسخی که سرور به درخواست‌ها می‌دهد، یک کد وضعیت نیز در بخش هدر HTTP وجود دارد. این کد ممکن است از بروز خطا حکایت کند و در عین حال برخی کدها به معنی پاسخ کامل و عدم وجود خطا هستند.

آشنایی با انواع کد وضعیت یا Status Code نه تنها برای طراحان وب و وب‌مسترها مفید است بلکه برای کاربران عادی نیز مفید است. به عنوان مثال اگر کاربر به صفحه‌ای مراجعه کنند و ارور سری ۵۰۰ دریافت کند، ایراد از سمت سرور است و نه کامپیوتر یا اینترنت کاربر. در نتیجه بدون اتلاف وقت، به صاحب وب‌سایت یا اپلیکیشن تحت وب اطلاع می‌دهد و سراغ کارهای دیگر می‌رود تا مشکل سرور برطرف شود.

انواع کد‌های وضعیت و معنای هر یک

کد وضعیت یک عدد سه رقمی است که رقم اول آن می‌توان ۱ الی ۵ باشد و ارقام بعدی برای مشخص کردن دقیق‌تر وضعیت و پاسخ به کار می‌رود. در ادامه به معنی هر یک از کد‌های وضعیت می‌پردازیم.

کدهای 1xx

کدهای وضعیت سری ۱۰۰ به معنی در حال پردازش بودن درخواست کلاینت توسط سرور هستند و این یعنی درخواست به درستی دریافت شده است. دو کد معروف‌تر این سری:

100 یا Continue که به معنی دریافت بخشی از درخواست کلاینت و در واقع یک درخواست بزرگ است و در نتیجه کلاینت می‌تواند ارسال درخواست به سرور را ادامه دهد، تا زمانی که سرور به دلیلی از دریافت ریکوئست سر باز زند.

101 یا Switching Protocols به معنی آمادگی سرور برای تغییر دادن پروتکل‌های ارتباطی بنابر درخواست کلاینت است.

کدهای 2xx

کد وضعیت سری ۲۰۰ به این معنی است که درخواست کلاینت توسط سرور دریافت و تفسیر شده و به خوبی پردازش شده است. به عبارت دیگر زمانی که سایتی را باز می‌کنید و همه‌چیز طبیعی و کامل به نظر می‌رسد، معمولاً کد وضعیت تمام درخواست‌ها ۲۰۰ است! و اما معنی برخی کد‌های وضعیت معروف سری ۲۰۰:

200 یا OK که کد وضعیت استاندارد در پاسخ به درخواست‌های موفق HTTP است و در حقیقت خطایی در صفحه‌ی وب وجود ندارد.

201 یا Created که کد وضعیتی در پاسخ به درخواست‌های کلاینت است که توسط سرور تکمیل شده‌اند و منبع جدیدی ایجاد شده است.

205 یا Reset Content که کد وضعیتی برای حالت‌هایی است که سرور با موقعیت درخواست کلاینت را تکمیل کرده ولیکن در بازگرداندن محتوا با مشکل مواجه شده است. در این صورت نیاز است که کلاینت یا مرورگر اینترنت، نمایش داکیومنت را ریست کند و تلاش مجدد شود.

کدهای 3xx

سری ۳۰۰ کدهای وضعیت به معنی Redirect شدن درخواست‌های کلاینت هستند. منظور از ری‌دایرکت یا هدایت مجدد این است که آدرس یا URL درخواستی توسط سرور پردازش شده و کاربر به URL دیگری هدایت می‌شود. به عنوان مثال به جای یک عکس، عکس دیگری بارگذاری می‌شود و یا به جای یک صفحه‌ی وب، صفحه‌ی دیگری با آدرس متفاوت بارگذاری می‌شود. و اما برخی کدهای وضعیت معروف و مهم سری ۳۰۰:

300 یا Multiple Choices کد وضعیتی است که نشان می‌دهد برای درخواست کلاینت چند انتخاب وجود دارد. کلاینت می‌تواند یک لینک را با حداکثر ۵ آدرس انتخاب کند.

301 یا Moved Permanently یکی از کدهای وضعیت است که نشان می‌دهد صفحه یا آدرس درخواستی کاربر به صورت دائمی به آدرس و URL جدیدی Redirect شده است.

302 یا Found کد وضعیتی به این معنی است که درخواست کلاینت به خوبی پردازش شده و منابع درخواستی موجود است اما در مسیری دیگر. منبع درخواستی به صورت موقتی با منبعی دیگر جایگزین شده و یا Redirect به URL جدید به صورت موقتی صورت می‌گیرد.

304 یا Not Modified که کد وضعیتی برای محتوا و منابع از قبل دانلود شده و به عبارت دیگر Cache شده است. در حقیقت اگر مرورگر کاربر قبلاً در مراجعه به وب‌سایتی، برخی فایل‌ها را دانلود کرده و در کش نگه داشته باشد تا دسترسی‌های بعدی سریع‌تر شود، کد پاسخ ۳۰۴ خواهد بود. بنابراین اگر در مشاهده کردن وب‌سایتی، کد وضعیت موجود در هدر پاسخ‌های HTTP برابر با ۳۰۴ باشد، محتوا از کش بارگذاری شده ولیکن ممکن است محتوایی با همان آدرس، در سمت سرور تغییر کرده باشد!

کدهای 4xx

کد وضعیتی که با عدد ۴ شروع شود، به معنی بروز خطا در سمت کلاینت است و سرور برای درخواست کلاینت، پاسخ خاصی ندارد. آدرس و URL‌ اشتباه و استفاده از سینتکس نادرست به ارور سری ۴۰۰ منتهی می‌شود. و اما برخی کدهای مهم:

400 یا Bad Request که کد وضعیتی در پاسخ به درخواست‌های دارای خطا از سمت کلاینت است و سرور نتوانسته درخواست را به دلایل مختلف مثل سینتکس اشتباه، تغییر مسیر اشتباه و … پردازش کند.

401 یا Unauthorized کد وضعیتی است که سرور در صورت دسترسی نامعتبر نمایش می‌دهد.

403 یا Forbidden یکی از کدهای وضعیت HTTPS‌ است که در صورت درخواست منابع غیرمجاز و ممنوع نمایان می‌شود.  زمانی که کلاینت می‌خواهد به محتوا دسترسی پیدا کند و رمز عبور یا … صحیح نیست، این کد وضعیت در هدر پاسخ قرار می‌گیرد.

404 یا Not Found معروف‌ترین کد وضعیت HTTPS در صفحات دارای خطا است و به این معنی است که درخواست کلاینت توسط سرور یافت نمی‌شود.

405 یا Method Not Allowed  یکی دیگر از کدهای وضعیت HTTPS‌ است که زمانی نمایش داده می‌شود که روش درخواست کلاینت توسط سرور پذیرفته شده اما توسط منابع درخواستی پشتیبانی نمی‌شود.

408 یا Request Timeout کد وضعیت HTTPS در پاسخ به درخواست‌هایی است که سرور به صورت کامل از مرورگر کاربر دریافت نکرده است و در واقع زمان انتظار بیش از حد زیاد بوده است. مهم‌ترین علت نمایش این کد وضعیت این است که بسته‌های داده در بازه‌ی زمانی ارتباط بین کلاینت و سرور از دست رفته است و سرور پس از مدتی انتظار، به دلیل عدم دریافت درخواست به صورت کامل، آن را رها کرده است.

410 یا Gone کد وضعیت HTTPS است که در صورت پیدا نشدن منابع یا صفحات درخواستی کلاینت توسط سرور، در هدر پاسخ قرار می‌گیرد. این کد وضعیت شبیه به کد 404 است و هر دو به معنی پیدا نشد، هستند ولیکن کد ۴۱۰ دائمی است و صفحه یا منابع درخواستی در حال حاضر و در آینده، موجود نخواهد بود، البته اگر وب‌مستر برای حل مشکل اقدامی نکند.

کدهای 5xx

کد وضعیت سری ۵۰۰ به ارورها و مشکلات سمت هاست و سرور مربوط می‌شود. به بیان دیگر زمانی که سرور نتواند ریکوئست کلاینت را پردازش کند، این خطا در هدر پاسخ قرار می‌گیرد. چند مورد از مهم‌ترین کدهای وضعیت سری ۵۰۰ به صورت زیر است:

500 یا Internal Server Error کد وضعیتی است که توسط پلاگین‌های جانبی یا خراب تولید می‌شود. این ارور سمت سرور زمانی نمایش داده می‌شود که سرور در اتصال به دیتابیس یا بانک اطلاعاتی با مشکل روبرو شده و می‌تواند منابع لازم را دریافت کند.

501 یا Not Implemented زمانی در هدر پاسخ قرار می‌گیرد که سرور از عملکرد درخواستی که در درخواست کلاینت موجود است، پشتیبانی نکند.

502 یا Bad Request کد وضعیتی است که معمولاً در زمان طولانی شدن درخواست منابع از دیتابیس نمایش داده می‌شود چرا که سرور یا هاست از درخواست منابع از دیتابیس انصراف می‌دهد و یا کانکشن هاست با سرور یا دیتابیس متوقف می‌شود. به عبارت دیگر زمانی که سرور و هاست پاسخ درستی از دیتابیس دریافت نکنند، این کد خطا در هدر پاسخ به کلاینت قرار می‌گیرد.

503 یا Service Unavailable کد خطایی است که در زمان افزایش بار پردازشی سرور نمایش داده می‌شود چرا که تعداد ریکوئست‌ها بیش از توان پاسخ‌گویی سرور است و نمی‌تواند به موقع پاسخ درخواست‌ها را به کلاینت یا همان مرورگر بازدیدکنندگان وب‌سایت بفرستد.

504 یا Gateway Timeout کد خطایی است که سروری که حد واسط یا Gateway بین کلاینت و سرور بالادستی است، در زمان دریافت نکردن پاسخ از سرور بالادست نمایش می‌دهد. سروری که کلاینت به آن متصل شده، درخواست را به سرور دیگری هدایت می‌کند، اگر پاسخی از سرور دوم دریافت نشود و زمان انتشار به پایان برسد، کد خطای 504 در هدر پاسخ قرار می‌گیرد.