در فرایند درخواست های HTTP ، همیشه یک کد وضعیت (Status Code) از سمت سرور برای مشخص کردن نوع نتیجه ی پاسخ مشخص میگردد که هرکدوم از اونها معنا و مفهوم خاص خودش رو داره ، در این مطلب قصد داریم ، تا بصورت خلاصه شرح هر کد وضعیت رو بررسی کنیم .
پاسخهای ارسالی از سمت سرور به 5 دسته تقسیم میشن :
سرور هدر درخواست ها رو دریافت کرده و اعلام میکنه که کلاینت body درخواست رو ارسال کنه (در صورتی که درخواست دارای body باشه ، مثلا ارسال POST صورت گرفته باشه).
این پاسخ در درخواست Upgrade ارسال شده در header ارسالی از سمت کلاینت برمیگرده و پروتکلی که سرور بهش تغییر پیدا میکنه رو مشخص میکنه (مثلا وقتی قصد اتصال به یک WebSocket رو داشته باشید این مورد رو پیش میاد)
این درخواست مشخص میکنه سرور درخواست رو دریافت کرده و در حال پردازشش هست ، ولی هنوز پاسخی قابل ارائه نیست.
این کد وضعیت بطور کلی در کنار هدر Link استفاده میشه و این امکان رو به user agent میده که پیش بارگذاری منابع رو تا زمان آماده سازی پاسخ سرور انجام بده
درخواست با موفقیت انجام شد که این موفقیت بسته به نوع درخواست HTTP متفاوت می باشد:
درخواست GET: منبع موردنظر دریافت شده و در message body برای کلاینت ارسال شده است
درخواست HEAD: Representation Headers ها در پاسخ ارسال میشه بدون بدنه ی پیام
درخواست PUT یا POST: نتیجه ی درخواست ارسال شده در Message Body ارسال میشه
درخواست TRACE: Message Body حاوی Request Message دریافتی از سمت سرور می باشد.
درخواست با موفقیت انجام شد و یک منبع جدید در سرور برای درخواست ارسال شده ایجاد شد. معمولا این جوابی هست که در پاسخ به درخواست های POST و PUT ارسال میشه.
درخواست ارسالی از سمت سرور دریافت شده ولی هنوز عملیاتی روی درخواست صورت نگرفته. این پاسخ معمولا در حالتهایی که درخواست دریافتی نیاز به پردازش سنگین داره یا Batch processing روی درخواست ها صورت میگیره ارسال میشه (مثلا شما درخواست رو به RabbitMQ ارسال کردین تا از طریق یه سیستم دیگه ای روش پردازش صورت بگیره )
این پاسخ نشون میده که پاسخ ارسالی تغییر پیدا کرده (معمولا وقتی یک proxy server داشته باشید این مسئله پیش میاد)
سرور درخواست رو با موفقیت پردازش کرده ولی هیچ محتوایی برگردانده نشده
به User-Agent اعلام میکنی که درخواست ازش ارسال شده رو ریست کنه
این کد زمانی برای کلاینت ارسال میشه که در درخواست ارسالی از سمت کلاینت ، هدر Range برای دریافت بخشی از یک resource ارسال شده باشه
برای درخواست ارسالی ، چند پاسخ مختلف وجود دارد که User-Agent یا کاربر میتونه یکی از اونها رو انتخاب کنه (روش استانداری برای انتخاب از بین گزینه های موجود وجود ندارد، پیاده کننده سیستم میتونه از طریقی که خودش میتونه امکان انتخاب رو به کاربر بده)
آدرس درخواستی بطور کامل تغییر پیدا کرده و آدرس جدید در پاسخ ارسال میشه
این کد به معنای این هست که منبع درخواستی بصورت موقت تغییر پیدا کرده .
سرور زمانی این کد رو برمیگردونه که به کلاینت اعلام کنه منبع درخواستی از طریق یک آدرس دیگه قابل دسترس هست
این کد برای مباحث مربوط به caching استفاده میشه. این کد به کلاینت میگه که تغییری در منبع درخواستی ایجاد نشده و کلاینت میتونه از نسخه ی cache شده ی خودش استفاده کنه .
این کد بدین معناست که کلاینت منبع درخواستی رو از آدرس دیگه ای بگیره ، فقط بایستی درخواست رو با متد قبلی به آدرس جدید ارسال کنه. یعنی اگر یک درخواست POST به UriA ارسال کرده و درجواب UriB رو دریافت کرده ، بایستی مجدد درخواست به UriB رو با متد POST ارسال کنه .
بدلیل اشتباه بودن اطلاعات ارسالی از سمت کلاینت ، سرور نمیتونه درخواست رو بفهمه
کلاینت درخواست دریافت منبعی رو داره که اجازه ی دسترسی بهش رو نداره
این کد برای استفاده های آینده رزرو شده و هدفش برای استفاده در سیستم های پرداخت آنلاین هست و در حال حاضر کاربر خاصی نداره .
کلاینت اجازه ی دسترسی به منبع مورد نظر رو نداره (برخلاف خطای 401 ، هویت کلاینت توسط سرور شناخته شده هست ، اما اجازه ی دسترسی به منبع درخواستی رو نداره)
منبع درخواستی توسط کلاینت توسط سرور پیدا نشده . در درخواستهایی که توسط مرورگر ارسال میشه یعنی URL مدنظر موجود نیست ولی در API ها میتونه به این معنی باشه که endpoint درست هست ولی ، منبع درخواستی وجود نداره .
همینطور سرور میتونه بجای پاسخ 403 ، خطای 404 رو برگردونه تا وجود منبع مورد نظر رو از نظر درخواست کننده پنهان کنه .
متد درخواست شده توسط سرور معتبر شناخته شده ، اما توسط آدرس ارسالی پشتیبانی نمیشه . برای مثال شما به یک آدرس درخواست POST ارسال میکنید ، در صورتی که اون آدرس GET رو پشتیبانی میکنه
این مطلب مجددا بروزرسانی می شود .
بنیانگذار توسینسو و توسعه دهنده
علی شکرالهی، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس موبایل، مهندسی نرم افزار از دانشگاه آزاد اسلامی واحد کرج ، بیش از 15 سال سابقه ی فعالیت های حرفه ای و آموزشی