رموز حالة HTTP

جدول قابل للبحث لكل رمز حالة HTTP مسجل، مع عبارة سببه الدقيقة وقسم RFC الذي يعرفه. صفِّ حسب الفئة من 1xx إلى 5xx.

ماذا يعني رمز الاستجابة هذا فعليًا؟ اكتب رقمًا مثل 429 أو كلمة مثل gateway لتصفية الجدول، أو قصره على فئة واحدة. يعرض كل صف الرمز وعبارة السبب الدقيقة التي تنتقل على الشبكة وقسم المواصفة الذي يعرّفه.

الرموز المطابقة
الرمز عبارة السبب معرّف في

قراءة رموز حالة HTTP بشكل صحيح

رقم الفئة يحمل العقد

يبدأ كل استجابة HTTP برمز من ثلاثة أرقام، والرقم الأول هو الجزء الوحيد الذي يُطلب من العميل فهمه. RFC 9110 صريح في هذا: العميل الذي يتلقى 499 غير معروف يجب أن يتعامل معه تمامًا كما يتعامل مع 400، لأن الفئة تحدد الدلالات والرقمان المتبقيان يضيفان تفاصيل عليها فقط. هذه القاعدة هي ما يحافظ على قابلية توسيع البروتوكول. يمكن للوكيل المكتوب في 2005 أن يوجّه 451 بشكل صحيح دون أن يعرف ما هو الرقابة القانونية.

تقسم الفئات الخمس بوضوح حسب المسؤول عن ما يحدث بعد ذلك. 1xx استجابة مؤقتة، لذا فالإجابة الحقيقية ما زالت قادمة ويبقى الاتصال مفتوحًا. 2xx تعني نجاح الطلب ويمكن للعميل التوقف. 3xx تعيد توجيهًا، لذا يجب على العميل المحاولة في مكان آخر. 4xx تحمّل الطلب المسؤولية، لذا فإن تكراره دون تغيير سيفشل مجددًا. 5xx تحمّل الخادم المسؤولية، لذا فقد ينجح الطلب نفسه عند إعادة المحاولة. لهذا تعتمد منطق إعادة المحاولة على الفئة لا على الرمز المحدد: إعادة محاولة 503 أمر معقول، وإعادة محاولة 403 خطأ.

رموز يختلط أمرها كثيرًا

التمييز بين 301 و308، أو 302 و307، ليس أسلوبيًا. الزوج الأقدم يسمح للعميل بتحويل POST إلى GET عند اتباع إعادة التوجيه، وهو ما فعلته المتصفحات تاريخيًا. الزوج الأحدث يمنع ذلك التحويل ويحافظ على الطريقة والجسم معًا. إذا نقلت نقطة نهاية نموذج بإعادة توجيه 301، فستحوّل بعض العملاء الإرسال بصمت إلى GET وتفقد الحمولة. استخدم 308 أو 307 لأي شيء ليس ذا أثر واحد.

يختلط أمر 401 و403 بالمثل. 401 تعني أن الطلب غير مصادق عليه ويجب أن يأتي مع تحدٍّ من WWW-Authenticate، يخبر العميل كيف يحاول مجددًا ببيانات اعتماد. 403 تعني أن الخادم فهم من أنت وما زال يرفض. إرسال 401 دون ترويسة تحدٍّ هو انتهاك للمواصفة، وإرسال 403 عندما نسي المستخدم تسجيل الدخول ببساطة يجعل تصحيح الفشل أصعب بكثير.

تحمل فئة 4xx أيضًا زوجًا مفيدًا حقًا: 400 مقابل 422. 400 تعني أن الطلب تعذر تحليله إطلاقًا، فالصيغة معطوبة. 422 تعني أن الصيغة حُللت جيدًا لكن المحتوى فشل في التحقق. تقسيم هذين يحوّل الفشل الغامض إلى فشل قابل للتنفيذ لعملاء API.

عبارات السبب للبشر فقط

النص بجانب الرمز، مثل Not Found أو I'm a teapot، هو عبارة السبب. يرسلها HTTP/1.1 في سطر الحالة، لكن HTTP/2 وHTTP/3 أزالاها تمامًا، لذا يحمل الاتصال الحديث الرقم غالبًا دون أي عبارة. لا يجب أن يعتمد أي شيء في العميل على تلك السلسلة. هي موجودة ليستطيع إنسان يقرأ سجلًا أو أثرًا خامًا رؤية ما حدث دون جدول استعلام.

بعض الرموز أيضًا أكثر تقييدًا مما تبدو. يجب ألا يتضمن 204 و304 جسم رسالة، لذا فإن الوسيط الذي يضيف جسمًا ينتج استجابة غير صالحة. لا تحمل استجابة HEAD جسمًا أبدًا بغض النظر عن الرمز. هذه القواعد الإطارية مهمة لأن جسمًا في مكان غير متوقع يخل بتزامن إعادة استخدام الاتصال، ويظهر ذلك كفساد غريب عبر الطلبات بدلاً من خطأ واضح.

ملاحظة المصدر المفتوح: نُفذ بـ JavaScript الخالصة دون مكتبات خارجية.

الأسئلة الشائعة

كم عدد رموز حالة HTTP الموجودة؟
تدرج IANA ما يزيد قليلاً عن ستين رمزًا مسجلًا عبر الفئات الخمس، ويغطي هذا الجدول جميعها بالإضافة إلى بضعة رموز WebDAV وامتداد منتشرة على نطاق واسع. السجل مفتوح عمدًا، لذا يمكن إضافة رموز جديدة، وهذا بالضبط سبب وجوب لجوء العملاء إلى رقم الفئة لأي شيء غير مألوف.
هل يجب أن أستخدم 301 أم 308 لإعادة التوجيه الدائمة؟
استخدم 308 إلا إذا أردت تحديدًا أن تحوّل العملاء القدامى POST إلى GET. كلاهما يعني أن المورد انتقل بشكل دائم، لكن 308 فقط تضمن بقاء الطريقة والجسم عبر إعادة التوجيه. لنقل صفحة بسيطة يعمل أي منهما، و301 لديها دعم إرث أوسع قليلاً.
ما الفرق بين 401 و403؟
401 تعني أنك لم تصادق وأن الاستجابة يجب أن تتضمن ترويسة WWW-Authenticate تصف كيفية ذلك. 403 تعني أنك صادقت جيدًا وما زلت غير مسموح لك. إذا كان المستخدم يحتاج فقط إلى تسجيل الدخول، فـ 401 صحيحة؛ إذا كان حسابه يفتقر فعلًا إلى الصلاحية، فـ 403 صحيحة.
هل 418 I'm a teapot رمز حالة حقيقي؟
إنه حقيقي بمعنى أن RFC 2324 يعرّفه لبروتوكول التحكم في إبريق القهوة للنص الفائق، وهي مواصفة كذبة أبريل من عام 1998. تُبقيه IANA محجوزًا حتى لا يطالب به شيء آخر. إنه ليس جزءًا من HTTP الفعلي، لكن عدة أطر تنفذه كبيضة فصح.
أي الرموز يجب أن يعيد عميلي محاولتها تلقائيًا؟
أعد المحاولة مع 408 و429 ومعظم استجابات 5xx، واحترم دائمًا ترويسة Retry-After عند وجودها. لا تعِد المحاولة مع رموز 4xx غير 408 و429، لأن الطلب نفسه هو المشكلة وتكراره دون تغيير سيفشل بالطريقة نفسها.
لماذا لا تحتوي استجابة HTTP/2 على عبارة سبب؟
أزالت HTTP/2 وHTTP/3 عبارة السبب من تنسيق الشبكة لأنه لم يُفترض بأي عميل تحليلها. يُنقل الرمز الرقمي فقط. الأدوات التي تعرض عبارة لاستجابة HTTP/2 تبحث عنها محليًا من جدول مثل هذا.