ما هي رموز حالة HTTP؟
رمز حالة HTTP هو الرقم المكوّن من ثلاث خانات الذي يعيده الخادم مع كل استجابة ليبيّن كيف جرى الطلب: 2xx نجاح، و3xx إعادة توجيه، و4xx مشكلة من جهة العميل (400 طلب غير صالح، و401 غير موثّق، و403 محظور، و404 غير موجود، و429 طلبات كثيرة جداً)، و5xx عطل من جهة الخادم. المعاني معرّفة في RFC 9110 وRFC 6585، والواجهة التي تستخدمها بدقة أسهل بكثير في الاختبار والمراقبة.
اقرأ الدليل: شرح رموز حالة HTTP
كيفية استخدام محلّل رموز حالة HTTP
- الصق استجابة HTTP الخام (سطر الحالة، ثم الترويسات، ثم سطر فارغ، ثم الجسم) أو مخرجات curl -i — أو انتقل إلى وضع الجلب وأدخل عنوان URL عاماً.
- إذا كان النص الذي ألصقته لا يحتوي على سطر حالة، فأدخل الرمز في حقل الحالة.
- انقر «تحليل» (Analyze) لقراءة دلالات تلك الحالة وما يُتوقَّع منها بشأن الجسم والتخزين المؤقت.
- راجع النتائج وجدول الترويسات المصاحبة؛ أصلح الأخطاء أولاً ثم التحذيرات.
مزايا محلّل رموز حالة HTTP
- يشرح فئة الحالة ومعناها واستخدامها المعتاد وتلميحات الاختبار لأي رمز من 100 إلى 599
- يفحص الترويسات المصاحبة لكل حالة: Location وWWW-Authenticate وAllow وRetry-After وContent-Range وProxy-Authenticate
- يرصد وجود جسم في استجابات 204/304، وغياب Content-Type، وقيم Retry-After غير الصالحة، وأخطاء 5xx القابلة للتخزين المؤقت، وأجسام JSON التي يتعذّر تحليلها
- يكتشف التعارض بين الطريقة ورمز الحالة، مثل 301 بعد POST أو 200 مع Location بعد عملية إنشاء
- يقبل الاستجابات الخام أو مخرجات curl -i أو قوائم الترويسات أو كائن JSON؛ أو يجلب عنوان URL عاماً دون اتباع عمليات إعادة التوجيه
- حكم نهائي (صحيح / مشكوك فيه / غير صحيح) مع جدول نتائج قابل للتنزيل
مثال على محلّل رموز حالة HTTP
استجابة 401 دون تحدٍّ
الإدخال:
HTTP/1.1 401 Unauthorized
Content-Type: text/html
Cache-Control: max-age=3600النتيجة:
Status: 401 Unauthorized (client error) · Verdict: Incorrect
High — WWW-Authenticate: 401 Unauthorized requires a WWW-Authenticate header. RFC 9110 requires at least one challenge.
Low — Content-Type: Error responses from APIs are easier to consume as application/problem+json.الأسئلة الشائعة حول محلّل رموز حالة HTTP
ما الترويسات المطلوبة لكل حالة؟
تحتاج الحالات 301/302/303/307/308 إلى Location، وتحتاج 401 إلى WWW-Authenticate، و405 إلى Allow، و407 إلى Proxy-Authenticate، و206 إلى Content-Range. وينبغي أن ترسل 429 و503 ترويسة Retry-After.
ما صيغ الإدخال المدعومة؟
استجابة HTTP خام (سطر الحالة، ثم الترويسات، ثم سطر فارغ، ثم الجسم)، أو مخرجات curl -i، أو أسطر بسيطة بصيغة «Name: value» مع إدخال رمز الحالة على حدة، أو كائن JSON يحتوي على الحالة والترويسات.
هل يتبع وضع الجلب عمليات إعادة التوجيه؟
لا — يعيد الاستجابة الأولى حتى تتمكن من فحص حالة إعادة التوجيه وترويسة Location الخاصة بها. ويجب أن يكون عنوان URL عاماً.
لماذا يعترض على وجود جسم في استجابة 204؟
يحظر RFC 9110 وجود جسم رسالة في استجابات 1xx و204 و304؛ ويفشل كثير من العملاء أو يتوقفون عن الاستجابة عند وجوده.
ما الفرق بين 401 و403؟
يعني 401 أن المصادقة مفقودة أو غير صالحة ويجب أن يتضمّن تحدّي WWW-Authenticate؛ أما 403 فيعني أن هوية المستدعي معروفة لكنه غير مسموح له، لذا لا حاجة إلى تحدٍّ.
ملاحظات تقنية
تُستمد دلالات الحالات من قاعدة معرفة HTTP المشتركة (RFC 9110 إضافةً إلى رموز الموردين الشائعة). والترويسات المصاحبة التي يعدّها المحلّل مطلوبة تنتج نتائج عالية الخطورة، أما الموصى بها فتنتج ملاحظات منخفضة الخطورة. ويشمل «المطلوب» ما يفرضه RFC 9110 بصيغة MUST (WWW-Authenticate مع 401، وAllow مع 405، وProxy-Authenticate مع 407، وContent-Range مع 206 أحادية الجزء)، إضافةً إلى Location مع 301 و302 و303 و307 و308: فالـRFC 9110 يصوغها بصيغة SHOULD مع 301 و302 و307 و308، ويعرّف 303 بأنها إعادة توجيه إلى الـURI الوارد في Location، ولا يستطيع العميل اتباع إعادة التوجيه بدونها. أما ETag مع 304 فملاحظة فقط، لأن RFC 9110 لا يفرضها إلا إذا كانت استجابة 200 ستتضمنها.
في وضع الجلب يُطلب من المُرحِّل (relay) عدم اتباع عمليات إعادة التوجيه حتى تُحلَّل استجابة 301/302 وترويسة Location الخاصة بها كما وردت؛ ويظل المُرحِّل يرفض العناوين الخاصة وعناوين الاسترجاع (loopback).
المراجع
- RFC 9110: HTTP Semanticsمعاني أساليب HTTP وحقول الترويسات ورموز الحالة والتفاوض على المحتوى، بغضّ النظر عن إصدار البروتوكول.
- RFC 6585: Additional HTTP Status Codesيعرّف الرموز 428 و429 (طلبات كثيرة جداً) و431 و511، بما فيها ترويسة Retry-After لتحديد المعدل.
- HTTP response status codes — MDNكل رمز حالة مع معناه واستخدامه المعتاد، من 100 إلى 511.