متوفر أيضًا بلغات أخرى: English · Español · Português · Français
رموز إغلاق WebSocket
قائمة IANA الكاملة، والرموز التي يمنع RFC 6455 وضعها في إطار Close معلَّمة بما هي عليه فعلًا، ومنها الرمز الذي جاء بك على الأرجح.
ما رمز إغلاق WebSocket؟
حين تنتهي وصلة WebSocket انتهاءً نظيفًا، يرسل الطرف المُغلِق إطار Close يحمل عددًا من أربعة أرقام يبيّن السبب. فـ 1000 يعني أن الوصلة انتهت طبيعيًا، و1001 أن الطرف راحل، و1011 أن الخادم صادف حالة غير متوقَّعة. ومكتبة العميل لديك تعرض ذلك العدد، وهو عادةً الدليل الوحيد الذي تحصل عليه عمّا اعتلّ.
وتدير IANA هذه الأعداد في سجل من أربعة وعشرين صفًّا: ستة عشر رمزًا مفردًا في نطاق 1000، وبضعة تخصيصات في نطاق 3000، وعدة مديات غير مخصَّصة أو مفروزة لتعرّفها أنت. وهذه الصفحة تسردها كلها مع بحث، والعدد الذي لا صفّ له يُحَلّ إلى المدى الذي يقع فيه.
وهي تعلّم كذلك شيئًا لا يستطيع السجل تعليمه. فثلاثة من تلك الرموز ليست رسائل البتة، وأحدها هو على الأرجح سبب قراءتك لهذا.
كيفية الاستخدام
- اكتب العدد الذي أبلغ عنه عميلك. يظهر الصفّ المطابق أولًا. وإن لم يكن للعدد صفّ خاص — كأي عدد في نطاق 2000، أو رمز استعمال خاص في نطاق 4000 — فستحصل على المدى الذي يشمله بدل ألا تحصل على شيء.
- اقرأ الحالة لا المعنى وحده. يذكر كل صفّ هل يمكن إرسال الرمز فعلًا. وهذا هو العمود الذي يخبرك هل اختاره الطرف الآخر أم اختلقته مكتبتك أنت.
- ابحث بالكلمات أيضًا. كتابة جزء من معنى تعمل — abnormal أو policy أو restart — وهو أسرع حين تتذكر العبارة نصف تذكّر ولا تتذكر العدد.
الرمز 1006 ليس رسالة من الخادم
هذا هو ما يستحق أن تخرج به. فثلاثة رموز — 1005 و1006 و1015 — يحمل كلٌّ منها في RFC 6455 جملةً تقول إنها قيم محجوزة لا يجوز ضبطها رمزَ حالة في إطار تحكّم Close. وليست مما يستطيع طرفٌ إرساله. بل هي موجودة لتجد المكتبة ما تُبلغ به حين لا شيء يستحق الإبلاغ.
فالرمز 1006 يعني أن عميلك لم يستلم أي إطار Close على الإطلاق. لم يخترْه أحد ولم يرسله أحد، بل ملأته المكتبة لتصف وصلةً توقفت ببساطة. ومن ثم فالسبب أدنى من البروتوكول: وصلة TCP سقطت، أو وسيط أو موازن حِمل انتهت مهلة المقبس عنده، أو شبكة اختفت، أو مصافحة لم تكتمل قط. والتنقيب في سجلات خادمك عمّن أرسل 1006 بحثٌ عن شخص لا وجود له.
والرمز 1005 هو الفكرة نفسها خطوةً أبعد: فقد وصل إطار Close فعلًا لكنه لم يحمل أي رمز حالة، وهذا جائز. أما 1015 فيبلّغ أن TLS أخفق قبل أن يوجد WebSocket يُتحدَّث عنه. وثلاثتها جانبك أنت يصف حاله، بالمفردات التي أفردتها المواصفة لهذا الغرض بعينه.
وثمة حالة رابعة يسهل خلطها بها وينبغي ألا تُخلط. فالرمز 1004 محجوز ومعناه غير محدَّد، ولا يحمل أي بند يمنع إرساله: إنه ببساطة عدد لم يُسنَد إليه عمل. أربع حالات إذن، حيث يُظهر الجدول المنقول عن السجل حالتين.
ما يقوله السجل وما لا يقوله
تنشر IANA خمسة أعمدة لكل صفّ: رمز الحالة ومعناه وجهة اتصال ومرجعًا وجهةَ التحكم بالتغيير. ولا عمود فيها عن جواز إرسال الرمز، ولا سبيل إلى إضافته دون تغيير مخطط السجل نفسه. فالتمييز لا يعيش إلا في نثر القسم 7.4.1 من RFC 6455.
ولهذا تفقده جداول منشورة كثيرة. فـ 1000 و1006 صفّان بالشكل نفسه، بالنوع نفسه من المعنى وبالإشارة نفسها إلى الوثيقة نفسها، فيرسمهما أي جدول مولَّد من السجل متطابقين. وليس في البيانات ما يقول إن أحدهما رسالة والآخر اختلاق محلي.
ولثلاثة رموز أصلٌ يستحق العرض لا التمويه. فـ 1012 و1013 و1014 — إعادة تشغيل الخدمة، وحاول لاحقًا، وخطأ بوابة يحاكي عمدًا الرمز 502 في HTTP — لم تعرّفها أي وثيقة معيارية. بل سُجّلت برسالة إلى قائمة بريدية، وعمود المرجع في السجل يشير إلى تلك الرسالة لا إلى وثيقة RFC. وهي تعمل، ومنفَّذة على نطاق واسع، ووصلت إلى هناك بطريق يخالف كل ما حولها.
والحدّ المعلن لصفحة كهذه أنها لقطة لسجل قد يكسب صفوفًا. والذي يمنعها من التقادم صامتةً أن المولّد يرفض البناء إن لم تعد وثيقة RFC 6455 تحوي الجملة الحرفية التي ينسبها إلى كل واحد من الرموز الثلاثة التي لا تُرسَل، فلا يمكن للتصنيف أن ينزاح عن مصدره دون أن يفشل البناء.
لماذا هي مجانية؟
القائمة كلها في الصفحة، والبحث فيها يجري داخل متصفحك. فلا شيء يُشغَّل على خادم ولا سبب يدعو لطلب حساب منك.
لا يُرفع شيء مما تكتبه ولا يُخزَّن ولا يُسجَّل. فأنت تصل إلى هنا عادةً برمز مأخوذ من سجل إنتاج، والطريقة الموثوقة لإبقاء ذلك خاصًا ألا نستقبله أبدًا.