تفاوت نسخه های HTTP 1/0 و HTTP 1/1 :
اعدادی که در مقابل پروتکل HTTP مشاهده می
کنید (۱/۰ و ۱/۱) در واقع نسخه های مختلف پروتکل HTTP هستند که توسط گروه
HTTP-WG (که خود زیر مجموعه IETF است) توسعه یافته اند. HTTP 1/0 نسخه
ابتدایی این پروتکل است که در ابتدا استفاده می شده و به دلیل نقاط ضعفی که
داشت، به تدریج توسعه داده شد و استاندارد HTTP 1/1 شکل گرفت. در نسخه
جدید پروتکل HTTP کدهای وضعیت بیشتری تعریف شده و امروزه بیشتر سرور ها و
مرورگرها از آن استفاده می کنند.
کدهای وضعیت HTTP سری ۱۰۰ (Informational) :
این کدها در مورد انتقال بسته های اطلاعات مثل ارسال و دریافت فایل، کاربرد
دارند و حالت گذرای پاسخ سرور را نشان می دهند. بطور نمونه وقتی از متد
POST در فرم های وب استفاده می کنیم، دریافت کد ۱۰۰ به معنی این است که
سرور درخواست ما را پذیرفته و فرایند پردازش اطلاعات ادامه دارد.
نکته: البته بدون ارسال
کد ۱۰۰ نیز این فرایند ادامه می یابد لذا ارسال آن از طرف سرور ضروری نیست و
حتی در مرورگرهایی که از نسخه HTTP/1.0 استفاده می کنند، این کد قابل
پردازش نیست .
کد ۱۰۰ (Continue) :
کد ۱۰۰ به این مفهوم است که سرور درخواست مرورگر را دریافت کرده و مرورگر
می تواند ادامه اطلاعات را ارسال نماید. این کد مخصوصا در مواقعی که حجم
زیادی از داده ها مثلا از طریق فرم های وب و متد POST ارسال می شود، مورد
استفاده قرار می گیرد و مرور گر با ارسال هدر Expect: 100-continue وضعیت
سرور را جهت آمادگی ادامه ارسال اطلاعات مورد بررسی قرار داده و اگر در
جواب کد ۱۰۰ را دریافت کند، ادامه اطلاعات را ارسال می کند، در غیر این
صورت کد ۴۱۷ Expectation Failed دریافت می شود .
کد ۱۰۱ (Switching Protocols):
کد ۱۰۱ به معنی درخواست مرورگر از سرور جهت تعویض پروتکل انتقال داده است.
در صورتی که سرور این تعویض پروتکل را ضروری ارزیابی کند، درخواست مرورگر
را انجام می دهد. برای مثال تعویض پروتکل HTTP 1/0 به نسخه HTTP 1/1 می
تواند مفید باشد، یا استفاده از پروتکل های real-time و synchronous نیز به
همین صورت است. مثلا در برنامه هایی که ازAjax (آژاکس) استفاده می کنند،
این کد می تواند مفید واقع شود.
کد ۱۰۲ (Processing):
از آنجایی که درخواست های مرورگر از سرور ممکن است شامل انجام فعالیت های
مختلفی باشد که هر کدام نیاز به پردازش جداگانه دارند، سرور با ارسال کد
۱۰۲ به مرور گر در واقع بیان می دارد که عملیات درخواستی، دریافت شده و در
حال پردازش است. به این صورت مرورگر در انتظار پاسخ کامل سرور بوده و از
قطع ارتباط به دلیل طی شدن حداکثر زمان (time out)، جلوگیری می شود.
کدهای وضعیت HTTP سری ۲۰۰ (Success):
کدهای سری ۲۰۰ به این معنی است که درخواست ارسالی مرورگر با موفقیت دریافت،
پذیرفته، پردازش و پاسخ داده شده است. کدهای سری ۲۰۰ معمولاً به معنی بی
نقص بودن درخواست و عملکرد صحیح سرور می باشد.
کد ۲۰۰ (OK):
کد استاندارد HTTP در وب، با عدد ۲۰۰ نشان داده می شود، دریافت پاسخ ۲۰۰ از
سرور به این معنی است که آدرس درخواستی (در متد GET یا عملیات مورد نظر در
متد POST به طور کامل و موفقیت آمیز توسط سرور انجام شده است . در یک
ارتباط بدون مشکل بین مرورگر و سرور، کدهای سری ۲۰۰ باید دریافت شوند.
کد ۲۰۱ (Created):
کد HTTP 201 به معنی دریافت موفقیت آمیز درخواست و ساخته شدن یک منبع جدید در سرور است (بطور مثال ایجاد یک فایل یا صفحه جدید).
نکته: ارسال کد ۲۰۱ تنها
در صورتی صحیح است که سرور منبع جدید را ساخته باشد، در غیر اینصورت (اگر
منبع هنوز ساخته نشده باشد) سرور کد ۲۰۲ را ارسال می نماید.
کد ۲۰۲ (Accepted):
کد ۲۰۲، به این معنی است که با درخواست مرورگر موافقت شده، اما پردازش
عملیات به طور کامل صورت نگرفته است. به همین دلیل تا پایان پردازش عملیات
درخواستی، ممکن است تقاضای کاربر کامل شده یا پذیرفته نشود.
کد ۲۰۳ (Non-Authoritative Information):
کد ۲۰۳ که در ورژن HTTP 1/1 تعریف شده، به این معنی است که سرور درخواست
مرورگر را به طور موفقیت آمیز پاسخ داده، ولی اطلاعات ارسالی (در پاسخ
سرور) از یک منبع غیر معتبر است (به فرض کپی از اطلاعاتی است که درستی آن
تایید نشده است). تنظیم این کد در سرورها معمولا غیر ضروری است و می توان
به جای آن کد ۲۰۰ را ارسال کرد .
کد ۲۰۴ (No Content):
کد ۲۰۴ به معنی دریافت و پردازش صحیح درخواست مرورگر است. اما پاسخ سرور
شامل محتوای خاصی نیست و می تواند به عنوان مثال تنها حاوی اطلاعات به روز
رسانی منبع درخواستی باشد. معمولا دریافت این پاسخ از سرور، بدین معنی است
که آدرس درخواستی هیچ گونه تغییری از آخرین درخواست تا به حال نداشته است و
فایل یا صفحه مربوطه به همان صورت قبلی نمایش داده می شود.
کد ۲۰۵ (Reset Content):
کد ۲۰۵ شباهت زیادی به عملکرد کد ۲۰۴ دارد. یعنی در اینجا نیز هیچ محتوایی
از طرف سرور ارسال نمی شود، اما در سمت کاربر اطلاعات فعلی Reset می گردند
که این معمولا منجر به ایجاد محتوای خالی می شود. این کد مخصوصا برای پاک
کردن اطلاعات فرم های وب می تواند مورد استفاده قرار گیرد.
کد ۲۰۶ (Partial Content):
کد ۲۰۶ برای حالت هایی که به طور نمونه از امکاناتی نظیر ادامه دانلود
(resume download) استفاده می شود، مورد استفاده قرار می گیرد. با ارسال
این کد توسط سرور، به قسمت خاصی از درخواست واسط کاربری به صورت جزئی پاسخ
داده می شود. با این شیوه برنامه هایی که از GNU wget یا انتقال داده از
سرور پشتیبانی می کنند، قادر خواهند بود حتی پس از قطع ارتباط نیز به ادامه
دریافت اطلاعات بپردازند. البته این قابلیت باید توسط سرور هم پشتیبانی
شود.
کدهای وضعیت HTTP سری ۳۰۰ (Redirection):
کدهای سری ۳۰۰ مربوط به مواردی هستند که پاسخ به درخواست مرورگر از سرور،
باید با انجام فعالیت دیگری (در سمت سرویس گیرنده) کامل شود. این عملیات
معمولا توسط مرورگر و به صورت خودکار انجام می شود. مثلا عمل Redirect به
آدرس دیگر، با ارسال کدهای سری ۳۰۰ انجام می شود.
نکته: Redirect ها نباید
در یک درخواست، بیش از ۵ بار تکرار شوند که در غیر اینصورت در اکثر مرورگر
ها فرض بر وجود loop (حلقه) شده و ارتباط قطع خواهد شد.
کد ۳۰۰ (Multiple Choices):
کد ۳۰۰ برای مواقعی است که سرور در پاسخ به درخواست مرورگر، چند منبع مختلف
را پیشنهاد می دهد (مثلا یک فایل با فرمت های مختلف) و انتخاب URL را به
عهده مرورگر سرویس گیرنده می گذارد. انتخاب مذکور نیز معمولا یا به صورت
خودکار انجام می شود یا اینکه سرور یکی از URL ها را به عنوان پیش فرض
انتخاب نموده و همراه پاسخ خود ارسال می نماید.
کد ۳۰۱ (Moved Permanently):
کد ۳۰۱ یکی از مهم ترین کدهای HTTP مخصوصا در خصوص SEO (بهینه سازی موتور
های جستجو) است. دریافت این کد از سوی سرور، به معنی انتقال همیشگی یک آدرس
وب به آدرسی دیگر است. استفاده از این کد مخصوصا هنگامی مفید می باشد که
به هر دلیل آدرس لینک سایت دچار تغییراتی شده است و برای هدایت ربات ها یا
کاربران به لینک اصلی، از آن استفاده می شود.
کد ۳۰۲ (Found):
کد ۳۰۲ به این معنی است که منبع درخواستی پیدا شده است، اما مرورگر باید موقتاً به آدرس دیگری منتقل شود.
نکته: این حالت با کد
۳۰۱ متفاوت است، در اینجا انتقال بطور گذرا انجام می شود و آدرس اصلی
همچنان معتبر و در دسترس خواهد بود. اما در Redirect 301، منظور از انتقال،
انتقال همیشگی، حذف آدرس فعلی و جایگزینی آن با آدرس جدید است .
کد ۳۰۳ (See Other):
کد ۳۰۳ نیز مشابه کد ۳۰۲ عمل می کند، با این تفاوت که در این کد تاکید روی متد GET است.
نکته: در کد ۳۰۳ آدرس فعلی و آدرس انتقالی باید از طریق متد GET درخواست شوند (که بطور معمول نیز به اینصورت خواهد بود).
کد ۳۰۴ (Not Modified):
کد ۳۰۴ مربوط به مواقعی است که مرورگر همراه درخواست خود، تقاضای دریافت
اطلاعات مربوط به آخرین تغییرات فایل یا منبع را نیز از سرور می نماید. اگر
در فایل مورد نظر از آخرین درخواست تا لحظه فعلی تغییری صورت نگرفته باشد،
سرور در پاسخ، کد ۳۰۴ Not Modified را ارسال می کند. این کار علاوه بر
اینکه باعث صرفه جویی در منابع سرور می شود، در افزایش سرعت پردازش در سمت
سرویس گیرنده نیز موثر است.
کد ۳۰۵ (Use Proxy):
کد ۳۰۵، به معنی این است که سرور برای دستیابی به منبع مورد تقاضا از سوی
سرویس گیرنده، باید از یک پروکسی استفاده کند. پروکسی در واقع سرور واسط
بین مرورگر و سرور اصلی است. به دلایل امنیتی برخی مرورگرها مانند :
Firefox و Internet Explorer از این قابلیت پشتیبانی نمی کنند.
کد ۳۰۶ (Switch Proxy):
کد ۳۰۶ هم مشابه کد ۳۰۵ است و مربوط به درخواست تغییر Proxy می باشد. این کد در حال حاضر استفاده نمی شود .
کد ۳۰۷ (Temporary Redirect):
کد ۳۰۷ مربوط به مواقعی است که منبع لینک اصلی، موقتا در آدرسی دیگر قابل
دسترسی است. این کد با Redirect 302 و ۳۰۳ تفاوت دارد. در اینجا انتقال
نیاز به تأیید کاربر داشته و به صورت خودکار انجام نمی شود. متدهای استفاده
شده نیز باید بین لینک اصلی و لینک انتقالی مشترک باشند. بقیه شرایط مشابه
کدهای ۳۰۲ و ۳۰۳ است و مرورگر باید لینک فعلی را در مراجعات بعدی به عنوان
لینک اصلی در نظر بگیرد.
کدهای وضعیت HTTP سری ۴۰۰ (Client Error):
کدهای سری ۴۰۰ مربوط به رخداد خطا از سوی سرویس گیرنده در ارائه درخواست به
سرور است. در پاسخ، سرور معمولاً به همراه کدهای HTTP عباراتی در توضیح
خطای رخ داده ارسال می کند و دائمی یا موقتی بودن مشکل به وجود آمده را نیز
مشخص خواهد کرد.
کد ۴۰۰ (Bad Request):
کد ۴۰۰ به دلیل متوجه نشدن Syntax درخواست مرورگر از سرور رخ می دهد. در
این حالت مفهوم درخواست سرویس گیرنده برای سرور قابل پردازش نمی باشد. این
خطا ممکن است به دلایل دیگری از قبیل نقص در انتقال داده ها (مثلا به دلیل
قطع یا افت سرعت ارتباط) نیز رخ دهد.
کد ۴۰۱ (Unauthorized):
کد ۴۰۱ به مفهوم دسترسی غیر مجاز است. در این حالت منبع درخواستی به طور
کامل محدود نشده است، بلکه درخواست سرویس گیرنده نیاز به تایید مجوزهای
دسترسی (معمولا نام کاربری و کلمه عبور) دارد. به همین دلیل سرور در پاسخ
خود یک فرم از نوع WWW-Authenticate را ارسال کرده و از سرویس گیرنده می
خواهد تا اعتبار خود را اثبات نماید.
کد ۴۰۲ (Payment Required):
کد ۴۰۲ استفاده فعلی ندارد و برای مقاصدی در آینده قرار داده شده است.
تعریف آن برای اکانتهایی است که نیاز به پرداخت وجه دارند. البته در عمل تا
کنون چنین اتفاقی رخ نداده است و از کد ۴۰۲ استفاده چندانی نمی شود .
کد ۴۰۳ (Forbidden):
کد ۴۰۳ معطوف مواقعی است که سرویس گیرنده درخواست منبعی را از سرور دارد
حال آنکه دسترسی به آن برای همه سرویس گیرندگان محدود شده است. این حالت با
کد ۴۰۱ تفاوت دارد، در این کد حتی با ورود نام کاربری و کلمه عبور نیز
امکان دسترسی مقدور نخواهد بود. معمولا مدیران سایت ها، دسترسی مستقیم به
پوشه ها و مرور فایل ها به صورت لیست (Directory Browsing) را غیر فعال می
کنند، در نتیجه وقتی آدرس یک پوشه را از آن سرور می خواهیم، با خطای ۴۰۳
مواجه خواهیم شد.
کد ۴۰۴ (Not Found):
کد ۴۰۴ در مواقعی رخ می دهد که مرورگر تقاضای منبعی (به طور مثال یک فایل
یا یک صفحه) را از سرور دارد که در حال حاضر موجود نبوده یا حذف شده است (و
یا ممکن است نام آن تغییر کرده باشد)، البته احتمال دارد در آینده مجدداً
آن منبع ایجاد شده و در دسترس قرار گیرد.
کد ۴۰۵ (Method Not Allowed):
کد ۴۰۵ به مفهوم آن است که متد استفاده شده توسط سرویس گیرنده برای درخواست
یک منبع از سرور مجاز نمی باشد. به طور مثال استفاده از متد GET در حالتی
که منبع درخواستی نیاز به ارسال منابعی از طریق متد POST دارد، یا استفاده
از PUT در نوشتن یک فایل، برای فایل هایی که فقط قابل خواندن هستند
(read-only). در حالات مذکور معمولاً سرور در پاسخ، متد مجاز را نیز ارسال
خواهد کرد.
کد ۴۰۶ (Not Acceptable):
کد ۴۰۶ ممکن است به دلیل وجود کاراکتر های غیر استاندارد در
درخواست ارسالی رخ دهد. برخی از سرورها به دلایل امنیتی نیز ممکن است این
کد را در پاسخ ارسال کنند. به طور مثال ماژول mod_security در سرورهای Apache
از پذیرفتن برخی آدرس های وب (که از نظر امنیت، سرور آنها را مشکوک تشخیص
دهد) خودداری کرده و پیام Not Acceptable دریافت خواهید کرد.
کد ۴۰۷ (Proxy Authentication Required):
عملکرد کد ۴۰۷ نیز شبیه کد ۴۰۱ است، با این تفاوت که در اینجا ابتدا سرویس گیرنده باید از طریق یک Proxy اعتبار خود را اثبات کند.
کد ۴۰۸ (Request Timeout):
کد ۴۰۸ زمانی رخ می دهد که سرور در انتظار درخواست مرورگر است، اما هیچ
پاسخی در زمان استاندارد دریافت نمی کند. در این حالت سرور کد ۴۰۸ را ارسال
می کند و مرورگر می تواند مجددا و در دفعات بعدی درخواست خود را ارسال
کند.
کد ۴۰۹ (Conflict):
کد ۴۰۹ به معنی تداخل درخواست سرویس گیرنده با عملیاتی دیگر در سرور بر روی
منبع مورد نظر است. به طور مثال وقتی دو کاربر به صورت همزمان در حال
ویرایش یک فایل هستند و هر دو آن را ذخیره می کنند، ممکن است این خطا رخ
دهد که باید به صورت دستی آن را رفع کرد.
کد ۴۱۰ (Gone):
کد ۴۱۰ به مفهوم حذف همیشگی منبع درخواستی از سرور است. بر خلاف کد ۴۰۴، کد
۴۱۰ به مرورگر یا موتورهای جستجو بیان می دارد بدلیل اینکه منبع مذکور
برای همیشه حذف شده است نباید مجددا آن را درخواست کنند. البته در عمل
موارد استفاده از این کد خیلی محدود است و تنظیم خطای ۴۰۴ اصولی تر است.
کد ۴۱۱ (Length Required):
کد ۴۱۱ بواسطه ی آن است که چون در تقاضای ارسالی اندازه یا طول محتوا وجود
ندارد، سرور از پاسخ به درخواست مرورگر خودداری می کند. در این حالت معمولا
مرورگر باید در سربرگ های HTTP درخواست خود را اضافه کند.
کد ۴۱۲ (Precondition Failed):
کد ۴۱۲ در واقع از آن جهت است که در تقاضای مرورگر مواردی ارسال شده است
(مثلا متد استفاده شده) که منبع سرور از آن طریق قابل دسترس نیست و نتیجه
بررسی اولیه سرور false شده است.
کد ۴۱۳ (Request Entity Too Large):
کد ۴۱۳ در حالتی رخ می دهد که طول رشته تقاضای ارسالی، بیش از حد توان و انتظار سرور است که متعاقبا ارتباط توسط سرور قطع خواهد شد.
نکته: اگر این حالت گذرا
باشد، معمولا در پاسخ، سربرگ Retry-After نیز ارسال می شود و مرورگر مجددا
و در دفعات بعدی می تواند تقاضای خود را ارسال کند.
کد ۴۱۴ (Request-URI Too Long):
این خطا به معنی طولانی بودن بیش از حد URL درخواستی است که سرور قادر به پردازش آن نیست .
کد ۴۱۵ (Unsupported Media Type):
کد ۴۱۵ به دلیل ارسال فرمتی به همراه تقاضای ارسالی (مثلا Upload یک فایل
یا یک تصویر) است که از نظر سرور قابل پذیرش نیست و سرور فرمت دیگری را
پشتیبانی می کند.
کد ۴۱۶ (Requested Range Not Satisfiable):
این کد به دلیل ارسال تقاضای قسمتی از یک منبع (مثلا بخشی از یک فایل) سرور در حالی که آن قسمت وجود ندارد می باشد.
کد ۴۱۷ (Expectation Failed):
کد ۴۱۷ به این مفهوم است که سربرگ های HTTP ارسالی مرورگر با انتظارات مورد نیاز سرور همخوانی ندارد (یا سربرگی ارسال نشده است).
کدهای وضعیت HTTP سری ۵۰۰ (Server Error):
کدهای سری ۵۰۰ به مفهوم نقص داخلی سرور است. با این حال سرور در مجموع سالم
بوده و احتمالا به طور گذرا در حال انجام بروز رسانی یا تغییراتی است که
در ساعات آینده مشکل رفع خواهد شد.
کد ۵۰۰ (Internal Server Error):
کد ۵۰۰ به مفهوم وقوع یک خطای داخلی در سرور است و معمولا به دلیل مشکل در
تنظیمات یا انجام بروز رسانی نرم افزاری یا سخت افزاری رخ می دهد. تنظیم
این کد بخصوص در مواقعی که می خواهیم در سایت تغییراتی اعمال کنیم که باعث
از دسترس خارج شدن موقتی آن می شود، مفید می باشد.
کد ۵۰۱ (Not Implemented):
این خطا بدین معنی است که سرور قادر به پردازش تقاضای مرورگر نیست (معمولا
به دلیل پشتیبانی نشدن متد ارسالی یا نقص امکانات مورد نیاز رخ می دهد).
کد ۵۰۲ (Bad Gateway):
کد ۵۰۲ به دلیل عدم دریافت پاسخ از سرورهای Upstream است و سرور فعلی به
عنوان یک Gateway عمل می کند. در این حالت معمولا Gateway بین سرور اصلی و
مرورگر قادر به تکمیل فرایند ارسال و دریافت پاسخ نیست. این حالت معمولا با
چند بار تلاش مجدد از سمت کاربر رفع خواهد شد.
کد ۵۰۳ (Service Unavailable):
دریافت کد ۵۰۳ به معنی از دسترس خارج شدن سرور به دلیل ترافیک زیاد یا
انجام به روز رسانی است. معمولاً این حالت موقتی بوده و پس از چند دقیقه یا
چند ساعت رفع خواهد شد.
کد ۵۰۴ (Gateway Timeout):
کد ۵۰۴ نیز به واسطه ی آن است که سرور به عنوان یک Gateway قادر به دریافت پاسخ از سرورهای Upstream در حداکثر زمان مجاز نیست.
کد ۵۰۵ (HTTP Version Not Supported):
کد ۵۰۵ به معنی پشتیبانی نشدن نسخه HTTP پروتکلی است که مرورگر از
آن استفاده می کند. معمولاً سرور دلیل پشتیبانی نکردن از آن نسخه را نیز
به همراه سربرگ های پاسخ خود ارسال می کند.