واجهة بوابة مشتركة بسيطة
تُعدّ واجهة البوابة المشتركة البسيطة ( SCGI ) بروتوكولًا يُمكّن التطبيقات من التفاعل مع خوادم HTTP ، كبديل لبروتوكول CGI . وهي تُشبه FastCGI ، ولكنها مُصممة لتكون أسهل في التحليل. وعلى عكس CGI، تسمح SCGI لعملية الخدمة طويلة الأمد بمواصلة تلبية الطلبات، وبالتالي تجنّب التأخير في الاستجابة للطلبات الناتج عن تكاليف الإعداد (مثل الاتصال بقاعدة بيانات).
SCGI هو بروتوكول يُحدد آلية الاتصال بين خادم الويب وخادم التطبيقات. وهذا يختلف عن CGI، وهو واجهة تطبيق (بوابة) سابقة مصممة لتمكين مبرمج التطبيقات من تجنب تعقيدات المقابس وعمليات الخدمة طويلة الأمد عندما يكون ضعف قابلية التوسع وارتفاع الحمل الزائد مقبولين.
يستفيد بروتوكول SCGI من حقيقة أن خادم الويب قد قام بالفعل بتحليل طلب HTTP والتحقق من صحته، وينقل الطلب بشكل موحد إلى خادم SCGI، مما يتيح لمبرمج التطبيق تجنب غموض التحليل وحالات البروتوكول الشاذة. وهذا يتجنب قواعد تحليل ودمج الرؤوس المعقدة الواردة في RFC 2616 ، مما يوفر تعقيدًا كبيرًا في عملية خادم SCGI.
تاريخ
نشر نيل شيمينور المواصفات الأصلية لبروتوكول SCGI بتاريخ أكتوبر 2001. [ 1 ] قام بتطوير أولى تطبيقات SCGI ونشرها مبدئيًا في أبريل 2002. [ 2 ]
مواصفة
يتصل العميل بخادم SCGI عبر بروتوكول تدفق موثوق يسمح بنقل بايتات بحجم 8 بت. يبدأ العميل بإرسال طلب. عندما يرى خادم SCGI نهاية الطلب، يرسل ردًا ويغلق الاتصال. لا يحدد هذا البروتوكول تنسيق الرد تحديدًا، على الرغم من أنه يتم استخدام استجابات HTTP المكافئة لـ CGI بشكل عام. [ملاحظة 1]
نموذج الطلب
طلب SCGI هو عبارة عن سلسلة من الرؤوس المشفرة باستخدام netstring وجسم الطلب. أما استجابة SCGI فهي استجابة HTTP عادية.
يتكون كل رأس من زوج اسم-قيمة ، حيث يكون كل من الاسم والقيمة عبارة عن سلاسل نصية منتهية بـ null ( سلاسل C ). يمكن أن تكون القيمة سلسلة نصية فارغة ، وفي هذه الحالة يبقى حرف null في النهاية. لا يمكن أن يحتوي أي من الاسم أو القيمة على أي بايتات null مضمنة . هذه الاعتبارات قياسية لسلاسل C، ولكنها غالبًا ما تكون مربكة للمبرمجين المعتادين على معايير أخرى للتعامل مع السلاسل النصية.
يتم دمج جميع الرؤوس المقدمة لتشكيل تسلسل بايت واحد، ثم يتم ترميزها باستخدام netstring . بعد ذلك، يتم إلحاق النص الخام، إن وجد.
لا يُسمح بتكرار الأسماء في رؤوس الطلبات؛ ويجب أن يكون دمج الرؤوس المتوافق مع معيار RFC 2616 [ملاحظة 2] قد تم مسبقًا. يجب أن يحمل رأس الطلب الأول الاسم "CONTENT_LENGTH" وقيمة تمثل طول نص الطلب بالصيغة العشرية. يجب أن يكون رأس الطلب "CONTENT_LENGTH" موجودًا دائمًا، حتى لو كانت قيمته "0". كما يجب أن يكون هناك دائمًا رأس طلب باسم "SCGI" وقيمة "1". ينبغي توفير متغيرات بيئة CGI القياسية في رؤوس SCGI لضمان التوافق عند تحويل برامج CGI القديمة إلى SCGI. يلي نص الطلب (إن وُجد) الرؤوس؛ ويُحدد طوله بواسطة رأس الطلب "CONTENT_LENGTH".
بينما يعزل بروتوكول SCGI مبرمج الخدمة عن بعض اعتبارات HTTP، فإن تفاصيل مختلفة (مثل تفسير وحدات البايت في نص الرسالة وفقًا لرأس Transfer-Encoding، وCONTENT_LENGTH الذي يمثل عدد وحدات البايت بعد ترميز النص للإرسال، وما إلى ذلك) لا تزال تتطلب معرفة بمواصفات بروتوكول HTTP.
مثال
يقوم خادم الويب (عميل SCGI) بفتح اتصال وإرسال سلسلة السلاسل التالية إلى عملية الخدمة (خادم SCGI):
"70:" "CONTENT_LENGTH" <00> "27" <00> "SCGI" <00> "1" <00> "REQUEST_METHOD" <00> "POST" <00> "REQUEST_URI" <00> "/deepthought" <00> " "ما هو جواب الحياة؟"
يقوم خادم SCGI بإرسال الاستجابة التالية إلى خادم الويب:
"الحالة: 200 موافق" <0d 0a> "Content-Type: text/plain" <0d 0a> "" <0d 0a> "42"
يقوم خادم SCGI بإغلاق الاتصال.
خوادم الويب التي تُنفذ SCGI
(هذه القائمة غير مكتملة)
- خادم Apache HTTP
- شيروكي
- لايت تي بي دي
- خدمات معلومات الإنترنت من مايكروسوفت مع امتداد ISAPI SCGI
- nginx
- Althttpd [ 3 ]
روابط اللغة لواجهة برمجة تطبيقات SCGI
يمكن تطبيق SCGI بأي لغة تدعم مقابس الشبكة وسلاسل الشبكة . فيما يلي قائمة جزئية باللغات التي تدعم SCGI:
انظر أيضاً
بروتوكولات التطبيق/البوابة:
- واجهة البوابة العامة (CGI) - تُشغّل عملية فرعية لكل طلب
- FastCGI - محاولات لزيادة قابلية التوسع من خلال دعم العمليات طويلة الأمد الشبيهة بـ CGI
- بروتوكول Apache JServ - بروتوكول ثنائي يهدف إلى توجيه الطلبات بين خادم الويب وخادم التطبيقات.
مضيفو التطبيقات (خاصة باللغة):
ملحوظات
- 1. ^ تم وضع وثيقة المواصفات في المجال العام بواسطة نيل شيمينور في 12 يناير 2006.
- 2. ^ للاطلاع على دمج رؤوس HTTP، انظر القسم 4.2 من RFC2616 .
مراجع
- ↑ شيمينور، نيل (30 أكتوبر 2001). "SCGI: بديل لواجهة بوابة مشتركة بسيطة" . مؤرشف من الأصل في 3 أبريل 2002.
- ↑ "scgi-0.1.tar.gz" . فهرس /software/files/scgi. MNX: تبادل تقنيات MEMS والنانو . 12 أبريل 2002. مؤرشف من الأصل في 20 أكتوبر 2002.
- ↑ "Althttpd: خادم الويب Althttpd" . sqlite.org . تم الاطلاع عليه بتاريخ 19 مايو 2023 .
روابط خارجية
- بروتوكولات الشبكة
