المعلوماتية > اتصالات وشبكات

رموز بروتوكول HTTP

كم مرّة ظهرت الرسالة 404 أو 502 أثناء تصفُحك الإنترنت؟ ماذا تعني هذه الأرقام وما دلالتها؟ 
تُسمّّى هذه الأرقام برموز الاستجابة لبروتوكول HTTP أو HTTP Response Code، وهي أرقامٌ تصف آليّة ردِّ المُخدِّم Server على طلب الزبون Client، وبالتالي تُحدِّد أسلوب تصرُّفِ الزبون. 

يُقصد بالزبون أيُّ برنامجٍ أو جهازٍ يتصل بالمُخدِّم ويطلب منه مورداً ما، مثلاً مُتصفِّح الويب هو زبون، بينما المستخدم هو من يقوم باستخدام هذا البرنامج أو الجهاز. أمّا المورد فيقصد به أيَّة صفحة إنترنت وأيَّة خدمةٍ يمكن أن يُقدِّمها المُخدِّم للزبون كالوصول لقاعدة البيانات، أو حتى إنشاء ملفاتٍ أو مُجلّداتٍ للزبون على المُخدِّم. 

تُصنَّف هذه الأرقام إلى عدَّة فئات: فئة المعلومات، وفئة النجاح، وفئة إعادة التوجيه، وفئة خطأ الزبون، وفئة خطأ المُخدِّم. 
1. المعلومات: 
تبدأ هذه الفئة بالرقم 1، وهدفها تسهيل التعامل بين المُخدِّم و الزبون. للعلم، فإنّ هذه الفئة لم تكن مُعرّّفةً ضمن الإصدار الأوَّل من بروتوكول HTTP. 
• Continue 100: ويعني أنّه يجب على الزبون أن يتابع في إرسال الطلب، إذ في بعض الأحيان يقوم الزبون بإرسال جزءٍ من الطلب للمُخدِّم، وعندما يقوم المُخدِّم بإرسال هذا الردِّ للزبون، فعلى الزبون أن يتابع إرسال بقيّة الطلب. 
• Switching Protocol 101: المُخدِّم مُستعدٌ لأن يقوم بتقديم الخدمة للزبون شريطة أن يُغيِّر الزبون البروتوكول الذي يتصل به مع المُخدِّم، مثل الانتقال من بروتوكول HTTP إلى بروتوكول HTTPS. 
• Processing 102: يُرسل المُخدِّم هذا الردَّ للزبون عندما يكون قد قبل الطلب وبدأ بالمعالجة، ولكنّه لم ينتهِ بعد، وعند انتهاء المعالجة يُرسل المُخدِّم ردَّاً للزبون يُعلمه بذلك. 

2. النجاح: 
تبدأ هذه الفئة بالرقم 2، وتُشير إلى أنّ المخدّم قد استقبل طلب الزبون بشكلٍ سليمٍ، وفهمه وقَبِله. 
• OK 200: الطلب وصل بنجاح، ويكون الردُّ من المُخدِّم مُعتمِداً على طريقة الطلب من الزبون مثلاً عند استخدام الطريقة GET من قبل الزبون، يكون الردُّ من المُخدِّم محتوياً على المورد الذي طلبه الزبون، أمّا عند استخدام الطريقة POST يكون الردُّ محتوياً على توصيف أو ناتج الفعل. 
• Created 201: في بعض الأحيان يتضمًّن طلب الزبون إنشاء موردٍ (ملفٍ مثلاً) على المُخدِّم، وفي حال نجاح عمليّة الإنشاء يكون رد المُخدِّم هو 201، بالإضافة إلى مسار هذا المورد. 
• Accepted 202: تعني أنّ المُخدِّم قَبِل طلب الزبون، لكنّه لم يقم بتنفيذه (وقد يمتنع عن تنفيذه لاحقاً)، و يكون الردُّ محتوياً إمّا على مُؤشرٍ يعطي معلوماتٍ عن حالة الطلب، أو على زمنٍ تقديريٍّ لإنهاء معالجة الطلب. 
• No Content 204: تمَّ إنجاز طلب الزبون بنجاح، ولكن لا توجد معلوماتٌ ليقوم المُخدِّم بإرسالها للزبون في الرد. 
• Reset Content 205 : تمَّت معالجة الطلب بنجاح، وعلى الزبون أن يقوم بإعادة تعيين (Reset) الواجهة، مثلاً عندما يكون الزبون مُتصفِّح ويب، وقام المستخدم بتعبئة بياناته في حقولٍ نصيّة، فعند وصول هذا الرد، يقوم الزبون بتفريغ الحقول النصيّة. 

3. إعادة التوجيه: 
تبدأ هذه الفئة بالرقم 3، وتشير إلى وجوب اتخاذ إجراءاتٍ إضافيّةٍ من الزبون لاستكمال الطلب. 
• Multiple Choices 300 : إنّ المورد الذي يحاول الزبون طلبه يمتلك عدَّة أشكال تمثيل، وكُلُّ شكلٍ له مساره الخاص، وبالتالي على الزبون (أو في بعض الأحيان المستخدم نفسه) أن يقوم باختيار التمثيل المناسب له والانتقال إليه. في حال كان الاختيار من قبل الزبون فهو اختيارٌ آلي، ولا يوجد ضمن هذا المعيار أيُّ طريقةٍ محدّدةٍ لتنفيذ هذا الاختيار. 
• Moved Permanently 301 : تشير إلى أنّ المورد المطلوب تمَّ نقل مساره إلى مسارٍ جديد، ويتوجب على المستخدم والزبون استخدام المسار الجديد، ويتضمن ردُّ المُخدِّم المسار الجديد للمورد. يمكن تغيير طريقة الطلب من POST إلى GET. 
• Found 302 : تمَّ تغيير مسار المورد بشكلٍ مؤقت، وبالتالي سيتمُّ التوجيه إلى المسار المؤقت الجديد، ويتوجب على المستخدم والزبون استعمال المسار الأصلي، ويتضمن ردُّ المُخدِّم المسار المؤقت للمورد، ويمكن تغيير طريقة الطلب من POST إلى GET. 
• See Other 303 : إنّ الردَّ على طلب الزبون موجودٌ في مسارٍ مختلف، و يجب استخدام طريقة GET للحصول على مسار هذا المورد. الهدف الأساسيُّ من هذا الرد هو السماح للبرامج التي تعتمد على طريقة POST بتحويل الزبون إلى المورد المطلوب. 
• Use Proxy 305 : لا يمكن الوصول إلى المورد المطلوب إلّا عن طريق وكيل Proxy، ويكون مسار هذا الوكيل مُحدّداً ضمن ردِّ المُخدِّم. 
• 306: غير مستخدم 
• Temporary Redirect 307 : مشابهٌ للردِّ 302 إلّا أنّه لا يسمح بتغيير طريقة الطلب من POST إلى GET. 
• Permanent Redirect 308: مشابهٌ للردِّ 301  إلّا أنّه لا يسمح بتغيير طريقة الطلب من POST إلى GET. 

4. خطأ الزبون:
تبدأ هذه الفئة بالرقم 4، وتُعبِّر عن الحالة التي يتواصل فيها الزبون مع المُخدِّم بشكلٍ خاطئ.
• Bad Request 400: المُخدِّم غير قادرٍ على فهم طلب الزبون، بسبب شكل الطلب الخاطئ، وعلى الزبون ألّا يُعيد الطلب دون تعديله. 
• Unauthorized 401: لا يمكن للزبون الوصول إلى المورد دون أن يُثبِّت هويّته، كأن تحاول الوصول لبريدك الإلكتروني دون أن تقوم بتسجيل الدخول إليه. 
• 402 : غير مُستخدمٍ حالياً. 
• Forbidden 403: أحد أشهر الردود وخاصةً للمستخدمين السوريين، ففي حال محاولتك الوصول لموردٍ لا ُيسمح لك بالوصول إليه حتى لو قمت بتسجيل الدخول، يقوم المُخدِّم بإرسال هذا الردِّ للزبون، كما في Google Code الذي تحجبه شركة غوغل عن سورية، ورغم تسجيل الدخول لحسابك في موقع غوغل فأنت غير قادرٍ على فتح Google Code. 
• Not Found 404: أيضاً أحد أشهر الردود والمثير للرعب في القلوب. يُعبِّر هذا الخطأ عن أنّ المورد الذي يطلبه الزبون غير موجودٍ أو أنّ المسار المحدَّد في الطلب لا يشير لأيِّ مورد. 
• Method Not Allowed 405: في بعض الأحيان، يتمُّ تحديد طريقةٍ معيّنةٍ للتواصل مع الموارد، مثلاً: إنّ تسجيل الدخول يتمُّ حصراً باستخدام طريقة POST، وبالتالي عندما تحاول تسجيل الدخول باستخدام الطريقة GET يقوم المُخدِّم بإرسال هذا الرد. 
• Proxy Authentication Required 407: مشابهٌ للردِّ 401 إلّا أنّ الزبون عليه أن يثبت هويّته عن طريق وكيل. 
• Request Timeout 408: يظهر هذا الخطأ بكثرةٍ في الخطوط البطيئة مثل الـ Dial up. عند فتح الاتصال مع المُخدِّم، على الزبون أن يقوم بإرسال طلبه خلال فترةٍ زمنيّةٍ مُحدّدة، وإلّا سيتم إغلاق الاتصال، وبالتالي عند ورود الطلب بعد انقضاء هذه المدة، يُرسل المُخدِّم هذا الرد. 
السبب في تحديد مدةٍ زمنيّةٍ لوصول الطلب من الزبون إلى المُخدِّم هو أنّ عرض الحزمة مأجورٌ ومُكلفٌ مادياً، وعليه يجب تجنُّب هدر هذا المورد. 

5. خطأ المُخدِّم: 
تبدأ هذه الفئة بالرقم 5، وتُعبِّر عن الأخطاء الحاصلة من طرف المُخدِّم. 
• 1Internal Server Error 500: حدث خطأٌ ما في المُخدِّم أثناء معالجة الطلب. 
• Not Implemented 501: يُرسل المُخدِّم هذا الردَّ إن طلب الزبون خدمةً لا يُقدِّمها المُخدِّم. 
• Bad Gateway 502 : يتمُّ توليد هذا الرد من المُخدِّم عندما يعمل كوكيل Proxy أو كبوابة Gateway واستلم ردًّ خاطئاً من المُخدِّم الذي يحوي الخدمة التي طلبها الزبون. 
• Service Not Available 503 : يُرسل المُخدِّم هذا الردَّ للزبون عندما يكون غير قادرٍ على تنفيذ الخدمة المطلوبة بسبب الحمولة الزائدة أو إجراءات صيانة، وتصبح الخدمة متاحةً بعد فترةٍ من الزمن. 
• Gateway Timeout 504 : يتمُّ توليد هذا الرد من المُخدِّم عندما يعمل كوكيل Proxy أو كبوابة Gateway ولا يستلم الردَّ من المُخدِّم خلال فترةٍ زمنيّةٍ مُحدّدة. 
• HTTP Version Not Supported 505 : يُرسل المُخدِّم هذا الردَّ للزبون إن كان إصدار بروتوكول HTTP الذي يستخدمه الزبون غير مدعومٌ من المُخدِّم. 

هل هذه هي كل أرقام الردود؟ كلا، توجد أرقام ردودٍ أُخرى كثيرة منها ما هو مستخدمٌ كمعيار ومنها ما هو قيد الاختبار. في النهاية معظم هذه الرسائل لا تظهر للمستخدم وإنّما يتجاوب معها الزبون، إلّا في حالة ردود الأخطاء التي يضطر الزبون إلى عرضها للمستخدم. 

المصادر: 
هنا;
هنا;
RFC 2518 
RFC 7231 
Draft IETF HTTPBIS RFC7238BIS-03