کدهای وضعیت HTTP چیست؟

هنگامی که با استفاده از پروتکل HTTP صفحات وب را مرور می نماییم، با هر آدرسURL ای که از طریق مرورگر خود از سرور سایت ها ی  مختلف درخواست می کنیم، کدهایی در پس زمینه بین مرور گر ما و سرور انتقال می یابد که به آنها در اصطلاح کدهای وضعیت HTTPمی گویند. این کدها توسط بنیاد های جهانی استاندارد سازی وب از جمله IETF و W3C تعریف شده اند. کدهای وضعیت   HTTP از لحاظ فنی و کاربری کاربردهای فراوانی دارند.

 

تفاوت نسخه های  HTTP 1/0و HTTP 1/1 :

اعدادی که در مقابل پروتکل HTTP مشاهده می کنید  ( 1/0 و 1/1) در واقع نسخه های مختلف پروتکل  HTTP هستند که توسط  گروه  HTTP-WG (که خود زیر مجموعه IETF است) توسعه یافته اند. HTTP 1/0 نسخه ابتدایی این پروتکل است که در ابتدا استفاده می شده و به دلیل نقاط ضعفی که داشت، به تدریج توسعه داده شد و استاندارد HTTP 1/1 شکل گرفت. در  نسخه جدید پروتکل HTTP کدهای وضعیت بیشتری تعریف شده و امروزه بیشتر سرور ها و مرورگرها از آن استفاده می کنند .

 

 

کدهای وضعیت HTTP سری 100 (Informational) :
این کدها در مورد انتقال بسته های اطلاعات مثل ارسال و دریافت فایل، کاربرد دارند و حالت گذرای پاسخ سرور را نشان می دهند. بطور نمونه وقتی از متد POST در فرم های وب استفاده می کنیم، دریافت کد 100 به معنی این است که سرور درخواست ما را پذیرفته و فرایند پردازش اطلاعات ادامه دارد.

 

نکته:  البته بدون ارسال کد 100 نیز این فرایند ادامه می یابد لذا ارسال آن از طرف سرور ضروری نیست و حتی در مرورگرهایی که از نسخه HTTP/1.0 استفاده می کنند، این کد قابل پردازش نیست .

 

  

کد 100 (Continue) :
کد 100 به این مفهوم است که سرور درخواست مرورگر را دریافت کرده  و مرورگر می تواند ادامه اطلاعات را ارسال نماید. این کد مخصوصا در مواقعی که حجم زیادی از داده ها مثلا از طریق فرم های وب و متد POST ارسال می شود، مورد استفاده قرار می گیرد و مرور گر با ارسال هدر Expect: 100-continue وضعیت سرور را جهت آمادگی ادامه ارسال اطلاعات مورد بررسی قرار داده و اگر در جواب کد 100 را دریافت کند، ادامه اطلاعات را ارسال می کند، در غیر این صورت کد 417 Expectation Failed دریافت می شود .

  

کد 101 :(Switching Protocols)
کد 101 به معنی درخواست مرورگر از سرور جهت تعویض پروتکل انتقال داده است . در صورتی که سرور این تعویض پروتکل را ضروری ارزیابی کند، درخواست مرورگر را انجام می دهد. برای مثال تعویض پروتکل  HTTP 1/0 به نسخه HTTP 1/1 می تواند مفید باشد، یا استفاده از پروتکل های real-time و  synchronousنیز به همین صورت است. مثلا در برنامه هایی که ازAjax استفاده می کنند، این کد می تواند مفید واقع شود .

  

کد 102 :(Processing)
از آنجایی که درخواست های مرورگر از سرور ممکن است شامل انجام فعالیت های مختلفی باشد که هر کدام نیاز به پردازش جداگانه دارند، سرور با ارسال کد 102 به مرور گر در واقع بیان می دارد که عملیات درخواستی، دریافت شده و در حال پردازش است. به این صورت مرورگر در انتظار پاسخ کامل سرور بوده و  از قطع ارتباط به دلیل طی شدن حداکثر زمان (time out) ، جلوگیری می شود .

  

کدهای وضعیت HTTP سری 200 : (Success)
کدهای سری 200 به این معنی است که درخواست ارسالی مرور گر با موفقیت دریافت، پذیرفته، پردازش و پاسخ داده شده است. کدهای سری 200 معمولا به معنی بی نقص بودن درخواست و عملکرد صحیح سرور می باشد .

  

کد 200 : (OK)
کد استاندارد HTTP در وب، با عدد 200 نشان داده می شود، دریافت پاسخ 200 از سرور به این معنی است که آدرس درخواستی (در متد (GET یا عملیات مورد نظر (در متد (POST به طور کامل و موفقیت آمیز توسط سرور انجام شده است . در یک ارتباط بدون مشکل بین  مرورگر و سرور، کدهای سری 200 باید دریافت شوند .

  

کد 201 : (Created)
کد HTTP 201 به معنی دریافت موفقیت آمیز درخواست و ساخته شدن یک منبع جدید در سرور است (بطور مثال ایجاد یک فایل یا صفحه جدید).

 

نکته:  ارسال کد 201 تنها در صورتی صحیح است که سرور منبع جدید را ساخته باشد، در غیر اینصورت (اگر منبع هنوز ساخته نشده باشد) سرور کد 202 را ارسال می نماید.

  

کد 202 :(Accepted)
کد 202 ، به این معنی است که با درخواست مرورگر موافقت شده، اما پردازش عملیات به طور کامل صورت نگرفته است . به همین دلیل تا پایان پردازش عملیات درخواستی، ممکن است تقاضای کاربر کامل شده یا پذیرفته نشود .

  

کد 203 : (Non-Authoritative Information)
کد 203 که در ورژن HTTP 1/1 تعریف شده، به این معنی است که سرور درخواست مرورگر را به طور موفقیت آمیز پاسخ داده، ولی اطلاعات ارسالی (در پاسخ سرور) از یک منبع غیر معتبر است (به فرض کپی ازاطلاعاتی است که درستی آن تایید نشده است). تنظیم این کد در سرورها معمولا غیر ضروری است و می توان به جای آن کد 200 را ارسال کرد .

  

کد 204 : (No Content)
کد 204 به معنی دریافت و پردازش صحیح درخواست مرورگر است . اما پاسخ سرور شامل محتوای خاصی نیست و می تواند بعنوان مثال تنها حاوی اطلاعات  بروز رسانی منبع درخواستی باشد. معمولا دریافت این پاسخ از سرور، بدین معنی است که آدرس درخواستی هیچ گونه تغییری از آخرین درخواست تا به حال نداشته است و فایل یا صفحه مربوطه به همان صورت قبلی نمایش داده می شود .

 

 

کد 205 (Reset Content) :
کد 205 شباهت زیادی به عملکرد کد 204 دارد. یعنی در اینجا نیز هیچ محتوایی از طرف سرور ارسال نمی شود، اما در سمت کاربر اطلاعات فعلیReset می گردند که این معمولا منجر به ایجاد محتوای خالی می شود. این کد مخصوصا برای پاک کردن اطلاعات فرم های وب می تواند مورد استفاده قرار گیرد .

 

کد 206 : (Partial Content)
کد 206 برای حالت هایی که بطور نمونه از امکاناتی نظیر ادامه دانلود (resume download) استفاده می شود، مورد استفاده قرار می گیرد . با ارسال این کد توسط سرور، به قسمت خاصی از درخواست واسط کاربری به صورت جزئی پاسخ داده می شود. با این شیوه برنامه هایی که از GNU wget یا انتقال داده از سرور پشتیبانی می کنند، قادر خواهند بود حتی پس از قطع ارتباط نیز به ادامه دریافت اطلاعات بپردازند. البته این قابلیت باید توسط سرور هم پشتیبانی شود .

  

کدهای وضعیت HTTP سری 300 : (Redirection)
کدهای سری 300 مربوط به مواردی هستند که پاسخ به درخواست مرورگر از سرور، باید با انجام فعالیت دیگری (در سمت سرویس گیرنده) کامل شود. این عملیات معمولا توسط مرورگر و به صورت خودکار انجام می شود. مثلا عمل Redirect به آدرس دیگر، با ارسال کدهای سری 300 انجام می شود .

 

نکته : Redirect ها نباید در یک درخواست، بیش از 5 بار تکرار شوند که در غیر اینصورت در اکثر مرورگر ها فرض بر وجود loop (حلقه) شده و ارتباط قطع خواهد شد .

  

کد 300 :(Multiple Choices)
کد 300 برای مواقعی است که سرور در پاسخ به درخواست مرورگر، چند منبع مختلف را پیشنهاد می دهد (مثلا یک فایل با فرمت های مختلف) و انتخاب  URL را به عهده مرورگر سرویس گیرنده می گذارد. انتخاب مذکور نیز معمولا یا به صورت خودکار انجام می شود یا اینکه سرور یکی از URL ها را به عنوان پیش فرض انتخاب نموده و همراه پاسخ خود ارسال می نماید .

  

کد 301 :(Moved Permanently)
کد 301 یکی از مهم ترین کدهای HTTP مخصوصا در خصوص SEO است . دریافت این کد از سوی سرور، به معنی انتقال همیشگی یک آدرس وب به آدرسی دیگر است. استفاده از این کد مخصوصا هنگامی مفید می باشد که به هر دلیل آدرس لینک سایت دچار تغییراتی شده است و برای هدایت ربات ها یا کاربران به لینک اصلی، از آن استفاده می شود.

  

کد 302 : (Found)
کد 302 به این معنی است که منبع درخواستی پیدا شده است، اما مرورگر باید موقتا به آدرس دیگری منتقل شود.

نکته: این حالت با کد 301 متفاوت است،  در اینجا انتقال بطور گذرا انجام می شود و آدرس اصلی همچنان معتبر و در دسترس خواهد بود. اما در Redirect 301 ، منظور از انتقال، انتقال همیشگی، حذف آدرس فعلی و جایگزینی آن با آدرس جدید است .

  

کد 303 : (See Other)
کد  303 نیز مشابه کد 302 عمل می کند، با این تفاوت که در این کد تاکید روی متد GET است.

 

نکته: در کد 303 آدرس فعلی و آدرس انتقالی  باید از طریق متد GET درخواست شوند( که بطور معمول نیز به اینصورت خواهد بود).

  

کد 304 : (Not Modified)
کد  304 مربوط به مواقعی است که مرورگر همراه درخواست خود، تقاضای دریافت اطلاعات مربوط به آخرین تغییرات فایل یا منبع را نیز از سرور می نماید. اگر در فایل مورد نظر از آخرین درخواست تا لحظه فعلی تغییری صورت نگرفته باشد، سرور در پاسخ، کد 304 Not Modified را ارسال می کند. این کار علاوه بر اینکه باعث صرفه جویی در منابع سرور می شود، در افزایش سرعت پردازش در سمت سرویس گیرنده نیز موثر است .

 

  

کد  305 : (Use Proxy)
کد 305 ، به معنی این است که سرور برای دستیابی به منبع مورد تقاضا از سوی سرویس گیرنده، باید از یک پروکسی استفاده کند . پروکسی در واقع سرور واسط بین مرورگر و سرور اصلی است. به دلایل امنیتی برخی مرورگرها مانند : Firefox و Internet Explorer از این قابلیت پشتیبانی نمی کنند .

 

  

کد 306 : (Switch Proxy)
کد 306 هم مشابه کد 305 است و مربوط به درخواست تغییر Proxy می باشد . این کد در حال حاضر استفاده نمی شود .

  

کد 307 : (Temporary Redirect)
کد 307 مربوط به مواقعی است که منبع لینک اصلی، موقتا در آدرسی دیگر قابل دسترسی است . این کد با Redirect 302   و 303 فرق دارد . در اینجا انتقال نیاز به تایید کاربر داشته و به صورت خودکار انجام نمی شود. متدهای استفاده شده نیز باید بین لینک اصلی و لینک انتقالی مشترک باشند. بقیه شرایط مشابه کدهای 302 و 303 است و مرورگر باید لینک فعلی را  در مراجعات بعدی به عنوان لینک اصلی در نظر بگیرد .

  

کدهای وضعیت HTTP سری 400 : (Client Error)
کدهای سری 400 مربوط به رخداد خطا از سوی سرویس گیرنده در ارائه درخواست به سرور است. در پاسخ، سرور معمولا به همراه کدهای HTTP عباراتی در توضیح خطای رخ داده ارسال می کند و دائمی یا موقتی بودن مشکل به وجود آمده را نیز مشخص خواهد کرد .

  

کد 400 : (Bad Request)
کد 400 به دلیل متوجه نشدن Syntax درخواست مرورگر از سرور رخ می دهد. در این حالت مفهوم درخواست سرویس گیرنده برای سرور قابل پردازش نمی باشد. این خطا ممکن است به دلایل دیگری از قبیل نقص در انتقال داده ها (مثلا به دلیل قطع یا افت سرعت ارتباط) نیز رخ دهد .

  

کد 401 : (Unauthorized)
کد 401  به مفهوم دسترسی غیر مجاز است. در این حالت منبع درخواستی به طور کامل محدود نشده است، بلکه درخواست سرویس گیرنده نیاز به تایید مجوزهای دسترسی (معمولا نام کاربری و کلمه عبور) دارد. به همین دلیل سرور در پاسخ خود یک فرم از نوع WWW-Authenticate را ارسال کرده و از سرویس گیرنده می خواهد تا اعتبار خود را اثبات نماید .

  

کد 402 : (Payment Required)
کد  402 استفاده فعلی ندارد و برای مقاصدی در آینده قرار داده شده است. تعریف آن برای اکانتهایی است که نیاز به پرداخت وجه دارند. البته در عمل تا کنون چنین اتفاقی رخ نداده است و از کد 402 استفاده چندانی نمی شود .

  

کد 403 : (Forbidden)
کد  403معطوف مواقعی است که سرویس گیرنده درخواست منبعی را از سرور دارد حال آنکه دسترسی به آن برای همه سرویس گیرندگان محدود شده است. این حالت با کد 401 تفاوت دارد، در این کد حتی با ورود نام کاربری و کلمه عبور نیز امکان دسترسی مقدور نخواهد بود. معمولا مدیران سایت ها، دسترسی مستقیم به پوشه ها و مرور فایل ها به صورت لیست (Directory Browsing ) را غیر فعال می کنند، در نتیجه وقتی آدرس یک پوشه را از آن سرور می خواهیم، با خطای 403 مواجه خواهیم شد .

 

  

کد 404 : (Not Found)
کد  404 در مواقعی رخ می دهد که مرورگر تقاضای منبعی (به طور مثال یک فایل یا یک صفحه) را از سرور دارد که در حال حاضر موجود نبوده یا حذف شده است (و یا ممکن است نام آن تغییر کرده باشد)،  البته احتمال دارد در آینده مجددا آن منبع ایجاد شده و در دسترس قرار گیرد .

 

 

کد 405 : (Method Not Allowed)
کد 405  به مفهوم آن است که متد استفاده شده توسط سرویس گیرنده برای درخواست یک منبع از سرور مجاز نمی باشد. بطور مثال استفاده از متد GET در حالتی که منبع درخواستی نیاز به ارسال منابعی از طریق متد POST دارد، یا استفاده از PUT در نوشتن یک فایل، برای فایل هایی که فقط قابل خواندن هستند (read-only) . در حالات مذکور معمولا سرور در پاسخ، متد مجاز را نیز ارسال خواهد کرد .

 

 کد 406 : (Not Acceptable)

کد 406  ممکن است به دلیل وجود کاراکترهای غیر استاندارد در درخواست ارسالی رخ دهد. برخی از سرورها به دلایل امنیتی نیز ممکن است این کد را در پاسخ ارسال کنند. به طور مثال ماژول mod_security در سرورهای Apache از پذیرفتن برخی آدرس های وب (که از نظر امنیت، سرور آنها را مشکوک تشخیص دهد) خودداری کرده و پیام   Not Acceptable دریافت خواهید کرد .

 

 کد 407 : (Proxy Authentication Required)

عملکرد کد 407 نیز شبیه کد 401 است، با این تفاوت که در اینجا ابتدا سرویس گیرنده باید از طریق یک Proxy اعتبار خود را اثبات کند .

  

کد 408 : (Request Timeout)
کد  408 زمانی رخ می دهد که سرور در انتظار درخواست مرورگر است، اما هیچ پاسخی در زمان استاندارد دریافت نمی کند. در این حالت سرور کد 408 را ارسال می کند و مرورگر می تواند مجددا و در دفعات بعدی درخواست خود را ارسال کند .

 

 

کد 409 : (Conflict)
کد 409 به معنی تداخل درخواست سرویس گیرنده با عملیاتی دیگر در سرور بر روی منبع مورد نظر است. به طور مثال وقتی دو کاربر به صورت همزمان در حال ویرایش یک فایل هستند و هر دو آن را ذخیره می کنند، ممکن است این خطا رخ دهد که باید به صورت دستی آن را رفع کرد .

  

کد 410 : (Gone)
کد 410 به مفهوم حذف همیشگی منبع درخواستی از سرور است. بر خلاف کد 404، کد 410 به مرورگر یا موتورهای جستجو بیان می دارد بدلیل اینکه منبع مذکور برای همیشه حذف شده است نباید مجددا آن را درخواست کنند. البته در عمل موارد استفاده از این کد خیلی محدود است و تنظیم خطای 404 اصولی تر است .

  

کد 411 : (Length Required)
کد  411 بواسطه ی آن است که چون در تقاضای ارسالی اندازه یا طول محتوا وجود ندارد، سرور از پاسخ به درخواست مرورگر خودداری می کند. در این حالت معمولا مرورگر باید در سربرگ های HTTP درخواست خود را اضافه کند .

  

کد 412 : (Precondition Failed)
کد 412  در واقع از آن جهت است که در تقاضای مرورگر مواردی ارسال شده است (مثلا متد استفاده شده) که منبع سرور از آن طریق قابل دسترس نیست و نتیجه بررسی اولیه سرور false شده است .

  

کد 413 : (Request Entity Too Large)
کد  413 در حالتی رخ می دهد که طول رشته تقاضای ارسالی، بیش از حد توان و انتظار سرور است که متعاقبا ارتباط توسط سرور قطع خواهد شد.

 

نکته: اگر این حالت گذرا باشد، معمولا در پاسخ، سربرگ Retry-After نیز ارسال می شود و مرورگر مجددا و در دفعات بعدی می تواند تقاضای خود را ارسال کند .

  

کد 414 : (Request-URI Too Long)
این خطا به معنی طولانی بودن بیش از حد URL درخواستی است که سرور قادر به پردازش آن نیست .

  

کد 415 : (Unsupported Media Type)
کد  415 به دلیل ارسال فرمتی به همراه تقاضای ارسالی (مثلا Upload یک فایل یا یک تصویر) است که از نظر سرور قابل پذیرش نیست و سرور فرمت دیگری را پشتیبانی می کند .

  

کد 416 : (Requested Range Not Satisfiable)
این کد به دلیل ارسال تقاضای قسمتی از یک منبع (مثلا بخشی از یک فایل)  سرور در حالی که آن قسمت وجود ندارد می باشد.

  

کد 417 : (Expectation Failed)
کد  417 به این مفهوم است که سربرگ های HTTP ارسالی مرورگر با انتظارات مورد نیاز سرور همخوانی ندارد (یا سربرگی ارسال نشده است) .

  

کدهای وضعیت HTTP سری 500 : (Server Error)
کدهای سری 500 به مفهوم نقص داخلی سرور است. با این حال سرور در مجموع سالم بوده و احتمالا به طور گذرا در حال انجام بروز رسانی یا تغییراتی است که در ساعات آینده مشکل رفع خواهد شد .

  

کد 500 : (Internal Server Error)
کد  500 به مفهوم وقوع یک خطای داخلی در سرور است و معمولا به دلیل مشکل در تنظیمات یا انجام بروز رسانی نرم افزاری یا سخت افزاری رخ می دهد. تنظیم این کد بخصوص در مواقعی که می خواهیم در سایت تغییراتی اعمال کنیم که باعث از دسترس خارج شدن موقتی آن می شود، مفید می باشد .

 

 کد 501 : (Not Implemented)

این خطا بدین معنی است که سرور قادر به پردازش تقاضای مرورگر  نیست (معمولا به دلیل پشتیبانی نشدن متد ارسالی یا نقص امکانات مورد نیاز رخ می دهد) .

 

 کد 502 : (Bad Gateway)

کد  502 به دلیل عدم دریافت پاسخ از سرورهای Upstream است و سرور فعلی به عنوان یک Gateway عمل می کند . در این حالت معمولا Gateway بین سرور اصلی و مرورگر قادر به تکمیل فرایند ارسال و دریافت پاسخ نیست . این حالت معمولا با چند بار تلاش مجدد از سمت کاربر رفع خواهد شد .

 

 کد 503 : (Service Unavailable)

دریافت کد 503 به معنی از دسترس خارج شدن سرور به دلیل ترافیک زیاد یا انجام بروز رسانی است. معمولا این حالت موقتی بوده و پس از چند دقیقه یا چند ساعت رفع خواهد شد .

  

کد 504 : (Gateway Timeout)
کد  504 نیز بواسطه ی آن است که سرور به عنوان یک Gateway  قادر به دریافت پاسخ از سرورهای Upstreamدر حداکثر زمان مجاز نیست .

 

 کد 505 : (HTTP Version Not Supported)

کد  505 به معنی پشتیبانی نشدن نسخه HTTP پروتکلی است که مرورگر از آن استفاده می کند. معمولا سرور دلیل پشتیبانی نکردن از آن نسخه را نیز به همراه سربرگ های پاسخ خود ارسال می کند .