هر کد وضعیت HTTP را جستجو کنید: معنی آن چیست، سرورها چه زمانی آن را ارسال میکنند و کدام مشخصات آن را تعریف میکند. بر اساس شماره یا کلیدواژه جستجو کنید، بر اساس کلاس فیلتر کنید و مستقیماً به هر کد لینک بگیرید.
سرور سرآیندهای درخواست را دریافت کرده است و کلاینت میتواند بدنه را ارسال کند. زمانی دیده میشود که کلاینت پیش از بارگذاری یک بدنه بزرگ «Expect: 100-continue» ارسال میکند.
پیش از پاسخ نهایی ارسال میشود تا مرورگر بتواند بارگذاری اولیه منابع فهرستشده در سرآیندهای Link را آغاز کند. توسط CDNها و سرورها برای افزایش سرعت بارگذاری صفحه استفاده میشود.
درخواست برای پردازش پذیرفته شده اما هنوز تکمیل نشده است. توسط APIهایی که کارها را در صف قرار میدهند، مانند خروجیگیری یا پردازشهای دستهای، استفاده میشود.
منبع برای همیشه به URL موجود در سرآیند Location منتقل شده است. مرورگرها و موتورهای جستجو پیوندهای خود را بهروزرسانی میکنند؛ برخی از کلاینتها هنگام دنبال کردن آن، POST را به GET تبدیل میکنند.
منبع بهطور موقت در URL دیگری است که در هدر Location آمده است. معمولاً پس از ورود و برای تغییرمسیرهای کوتاهمدت رخ میدهد؛ مرورگرها معمولاً آن را با GET دنبال میکنند.
نسخه کششده همچنان معتبر است، بنابراین سرور بدنهای ارسال نمیکند. زمانی دیده میشود که مرورگر یک فایل کششده را با If-None-Match یا If-Modified-Since اعتبارسنجی مجدد میکند.
منبع بهطور موقت در URL دیگری است و کلاینت باید درخواست را با همان متد و بدنه تکرار کند. مرورگرها همچنین از آن برای هدایتهای داخلی HSTS به HTTPS استفاده میکنند.
درخواست فاقد اعتبارنامه احراز هویت معتبر است. برخلاف نامش، به معنای «احراز هویت نشده» است؛ سرور هدر WWW-Authenticate را ارسال میکند که نحوه ورود را توضیح میدهد.
سرور درخواست را فهمیده اما آن را رد میکند و ورود مجدد کمکی نخواهد کرد. زمانی دیده میشود که مجوزها وجود نداشته باشند، فهرست نمایش پوشه غیرفعال باشد یا فایروال کلاینت را مسدود کند.
شرطی در هدرهای درخواست، مانند If-Match، برآورده نشده است. برای جلوگیری از بازنویسی منبعی استفاده میشود که از آخرین باری که کلاینت آن را خوانده تغییر کرده است.
URL طولانیتر از آن است که سرور پردازش کند. معمولاً به دلیل ارسال داده بیش از حد یک فرم با GET یا یک حلقه تغییرمسیر است که مدام پارامترها را اضافه میکند.
یک شوخی اول آوریل از پروتکل Hyper Text Coffee Pot Control Protocol محصول ۱۹۹۸: قوریای که از دمکردن قهوه خودداری میکند. HTTP این کد را بدون استفاده رزرو کرده است، اما برخی سرورها آن را بهعنوان ایستر اگ یا برای رد کردن رباتهای ناخواسته برمیگردانند.
درخواست خوشساختار است اما محتوای آن نامعتبر است؛ مانند فرمی که قوانین اعتبارسنجی را رد کرده است. APIها بهطور گسترده از آن برای خطاهای اعتبارسنجی استفاده میکنند.
کلاینت در یک بازه زمانی معین درخواستهای زیادی فرستاده است. APIها از آن برای محدودسازی نرخ استفاده میکنند و اغلب هدر Retry-After را اضافه میکنند که زمان تلاش دوباره را مشخص میکند.
کد استانداردی نیست. nginx آن را بهصورت داخلی برای بستن اتصال بدون ارسال هیچ پاسخی استفاده میکند؛ اغلب برای دور ریختن ترافیک ناخواسته. کلاینتها هرگز آن را دریافت نمیکنند.
کد استانداردی نیست. nginx آن را زمانی ثبت میکند که کلاینت پیش از پاسخ سرور اتصال را بسته باشد؛ برای مثال وقتی کاربر صفحهٔ کُند را لغو میکند یا مهلت زمانی سمت کلاینت سر میآید.
سرور با خطای غیرمنتظرهای روبهرو شد و نتوانست درخواست را کامل کند. خطایی عمومی ناشی از باگ، خرابی یا پیکربندی نادرست؛ جزئیات در لاگهای سرور موجود است.
یک دروازه یا پروکسی پاسخی نامعتبر از سرور بالادستی دریافت کرد. زمانی رایج است که برنامهٔ پشت nginx یا متعادلکنندهٔ بار از کار افتاده یا در حال راهاندازی مجدد است.
سرور موقتاً قادر به پردازش درخواست نیست؛ زیرا بیش از حد بارگذاری شده یا برای نگهداری از دسترس خارج است. هدر Retry-After ممکن است زمان مناسب برای تلاش دوباره را مشخص کند.
یک دروازه یا پروکسی بهموقع پاسخی از سرور بالادستی دریافت نکرد. زمانی دیده میشود که درخواست بکاند بیش از حد کند است؛ مانند یک کوئری طولانی پایگاهداده.
کد استانداردی نیست. Cloudflare زمانی آن را برمیگرداند که سرور مبدأ اتصال را رد کند؛ معمولاً به این دلیل که وبسرور خاموش است یا آدرسهای IP مربوط به Cloudflare را مسدود کرده است.
کد استانداردی نیست. Cloudflare زمانی آن را برمیگرداند که به سرور مبدأ متصل شده اما پاسخ HTTP را در مهلت تعیینشده دریافت نکرده است (بهطور پیشفرض ۱۰۰ ثانیه).
کد استانداردی نیست. Cloudflare زمانی آن را برمیگرداند که گواهی SSL سرور مبدأ نامعتبر باشد و حالت SSL از نوع Full (strict) فعال باشد.
تعریفشده در Cloudflare
نحوه استفاده
یک شماره کد تایپ کنید (مثلاً 404 یا فقط 5 برای همهٔ خطاهای سرور) یا یک کلیدواژه مانند «redirect» یا «timeout».
فهرست را با فیلتر کلاس محدود کنید: اطلاعاتی، موفقیت، تغییر مسیر، خطای کلاینت یا خطای سرور.
برای اشتراکگذاری لینک مستقیم هر کد، از «کپی لینک» روی آن استفاده کنید؛ مثلاً در گزارش باگ.
نحوه کار
هر پاسخ HTTP با یک کد وضعیت سهرقمی شروع میشود. رقم اول کلاس را مشخص میکند: 1xx پاسخهای اطلاعاتی، 2xx موفقیت، 3xx تغییرمسیر، 4xx خطاهای ناشی از درخواست و 5xx خطاهای سمت سرور. کلاینتهایی که کد خاصی را نمیشناسند با آن مانند کد x00 کلاس مربوطه رفتار میکنند؛ بنابراین کد 4xx ناشناخته مانند 400 مدیریت میشود.
کدهای اصلی در RFC 9110 (HTTP Semantics, 2022) تعریف شدهاند که جایگزین RFC 7231 قدیمیتر شده است. بقیه از افزونهها میآیند: WebDAV (RFC 4918)، RFC 6585 برای 428، 429، 431 و 511، RFC 7725 برای 451 و RFC 8470 برای 425. RFC 9110 همچنین دو کد را تغییر نام داد: 413 اکنون «Content Too Large» و 422 «Unprocessable Content» است، هرچند ممکن است هنوز با نامهای قدیمی «Payload Too Large» و «Unprocessable Entity» دیده شوند.
برخی کدهایی که در لاگها میبینید اصلاً استاندارد نیستند. nginx بهصورت داخلی از 444 و 494 تا 499 استفاده میکند (499 نشاندهنده کلاینتی است که از انتظار منصرف شده است) و Cloudflare وقتی نتواند پاسخ درستی از سرور مبدأ بگیرد کدهای 520 تا 526 را برمیگرداند. این موارد در فهرست بهعنوان «Non-standard» علامتگذاری شدهاند. عبارتهای دلیل (مانند «Not Found») همانگونه که در مشخصات نوشته شدهاند به انگلیسی نمایش داده میشوند؛ HTTP/2 و HTTP/3 فقط عدد را ارسال میکنند.
نمونهها
301 یا 308 هنگام انتقال سایت
هر دو دائمی هستند. برای انتقال عادی صفحه از 301 استفاده کنید؛ زمانی از 308 استفاده کنید که کلاینتها باید درخواستهای POST یا PUT را برای URL جدید تکرار کنند، زیرا برخی کلاینتها پس از 301 درخواست POST را به GET تغییر میدهند.
401 در برابر 403
یک API وقتی هیچ توکنی ارسال نشود یا توکن منقضی باشد 401 برمیگرداند، بنابراین کلاینت باید وارد شود. وقتی توکن معتبر است اما کاربر مجوز ندارد 403 برمیگرداند، بنابراین ورود دوباره کمکی نمیکند.
عیبیابی خطای 502 پشت nginx
خطای 502 Bad Gateway از nginx یعنی برنامه پشت آن بهدرستی پاسخ نداده است. بررسی کنید که فرآیند برنامه در حال اجراست و چه چیزی لاگ کرده است؛ 504 یعنی خیلی کند پاسخ داده است.
پرسشهای متداول
تفاوت 404 و 410 چیست؟
404 یعنی سرور نمیتواند منبع را پیدا کند و چیزی درباره آینده نمیگوید. 410 یعنی منبع عمداً حذف شده است و برنخواهد گشت؛ این موضوع به موتورهای جستوجو کمک میکند URL را زودتر حذف کنند.
آیا خطای اعتبارسنجی باید 400 برگرداند یا 422؟
هر دو استفاده میشوند. 400 برای درخواستهایی مناسب است که سرور نمیتواند تجزیه کند، مانند JSON خراب. 422 برای درخواستهایی مناسب است که درست تجزیه میشوند اما مقدارهای نامعتبر دارند، مانند فیلد ایمیل بدون @.
آیا 418 با متن «I'm a teapot» یک کد وضعیت واقعی است؟
این کد از یک RFC شوخی اول آوریل در سال 1998 میآید. RFC 9110 کد 418 را بهعنوان استفادهنشده رزرو کرده است تا به چیز دیگری اختصاص نیابد، و برخی سرورها آن را بهشوخی برمیگردانند، اما معنای استانداردی ندارد.
کد 499 از کجا میآید؟
کد 499 مخصوص nginx است. وقتی کلاینت پیش از ارسال پاسخ سرور، اتصال را ببندد، این کد در لاگهای nginx ظاهر میشود. کلاینت هرگز 499 دریافت نمیکند؛ این کد معمولاً به پاسخهای کند یا تایماوت سمت کلاینت اشاره دارد.
آیا موتورهای جستجو با 302 مانند 301 برخورد میکنند؟
کد 302 نشانهٔ جابهجایی موقت است، بنابراین موتورهای جستجو معمولاً در ابتدا URL اصلی را ایندکسشده نگه میدارند. اگر 302 برای مدت طولانی باقی بماند، گوگل ممکن است آن را مانند ریدایرکت دائمی در نظر بگیرد. برای جابهجایی دائمی از 301 یا 308 استفاده کنید.
حریم خصوصی
فهرست بخشی از صفحه است. جستجو و فیلتر کردن در مرورگر شما انجام میشود؛ عبارتهای جستجوی شما به جایی ارسال نمیشوند و در تحلیلها گنجانده نمیشوند.