# واجهة المعابر العامة

واجهة المعابر العامة (CGI) هي بروتوكول قياسي لربط تطبيق برمجي خارجي مع خادم للمعلومات، عادة ما يكون خادم الويب.

## الغرض

مهمة خادم المعلومات هذا هي الاستجابة للطلبات (في حالة خوادم الويب(web servers) لطلبات العميل خلال متصفحات الشبكة) عن طريق إعادة إرسال النتائج. في كل مرة يتم تلقي طلب، يقوم الخادم بتحليل ما يحتاجه هذا الطلب، وإعادة إرسال الناتج المناسب. والطريقتين الأساسيتين للخادم للقيام بذلك هما:
* إذا كان هذا الطلب يحدد ملف مخزن على القرص الصلب، فسيتم إعادة إرسال محتويات هذا الملف.
* إذا كان هذا الطلب يحدد أمر قابل للتنفيذ وعوامل ممكنة ،فسيتم تنفيذ الأمر وإعادة إرسال النتائج.
واجهة المعابر العامة(CGI) حددت الطريقة الثابتة لتنفيذ الطريقة الثانية. انه يحدد كيفية انتقال معلومات الخادم والطلب إلى الأمر في شكل عوامل ومتغيرات، وكيفية قيام الأمر بإعادة نقل معلومات إضافية حول الناتج (مثل نوع الملف(MIME)) عن طريق إرفاقة برؤوس.

## التاريخ

في عام 1993، كانت شبكة الويب العالمية(world wide web) صغيرة ولكنها مزدهرة. مطوري برامج الشبكة العالمية ومطوري المواقع بقوا على اتصال مع القائمة البريدية لشبكة الاتصالات العالمية ، لذلك كان هناك معيار لأنه لطلب سطور الأوامر القابلة للتنفيذ تم الاتفاق عليه. وهذه هي مساهمات واجهة المعابر العامة التي ذكرت على وجه التحديد :
* روب ماكول كاتب (NCSA http HTTP server)
* جون فرانكس (كاتب GN web server)
* آري لوتونين ([[web serve [[CERN httpd)
* توني ساندرز (كاتب Plexus web server)
* جورج فيليبس (القائم بصيانة خادم الويب في جامعة كولومبيا البريطانية
وكتب فريق المركز الوطني لتطبيقات الحوسبة الفائقة المواصفات، ولا تزال NCSA تستخدمه. مطوري الويب الآخرين تبنوها، وصارت معيارا منذ ذلك الحين.

## مثال

مثالا لبرنامج واجهة المعابر المشتركة(CGI) هو المستخدم في تنفيذ ويكي(Wiki). وكيل المستخدم يطلب اسم المدخل ؛ الخادم سيقوم باسترداد مصدر صفحة هذا المدخل (إن وجد)، وتحوله إلى لغة ترميز النص الفائق، وتقوم بإرسال النتيجة.

## المزيد من التفاصيل

من وجهة نظر خادم الويب (web server) توجد محددات مواقع معينة، http://www.example.com/wiki.cgi على سبيل المثال، تعرف بأنها المماثلة لتنفيذ البرنامج عن طريق واجهة المعابر المشتركة. عندما تلقي طلب رابط معين يتم تنفيذ هذا البرنامج المماثل.
يتم تمرير البيانات في البرنامج باستخدام المتغيرات. وهذا على النقيض من التنفيذ التقليدي، حيث تستخدم سطورر الأوامر الوسيطة. في حالة Request HTTP PUT أو POSTs فإن البيانات المقدمة من قبل المستخدم تنتقل للبرنامج من خلال الإدخال النموذجي
خوادم الويب (web servers)غالبا ما يحتوون على مجلد للـ cgi-bin عند قاعدة شجرة المجلدات حتى تحمل الملفات القابلة للتنفيذ تسمى with CGI.
البرنامج يقوم بإعادة النتيجة لخادم الويب في شكل المخرج القياسي، مسبوقة بالعنوان وسطر فارغ.

### شكل الرأس

الرأس يتم ترميزه بنفس طريقة ترميز رأس HTML ويجب أن يشمل نوع الملف (MIME)العائد. الرؤوس عموما يتم توجيهها مع الاستجابة اللاحقة إلى المستخدم، على أن يستكملها خادم الويب.

## العيوب

في حالة مناداة CGI يتعلق باستخدام لغة برمجة مثل csh أو بيرل(perl)، من الراجح أن أخطاء البرمجة تؤدي إلى (code injection) حقن الترميز المضعفّة.
طلب أمر عموما يعني تنفيذ العملية التي أنشئت حديثا. بدء عملية يمكن ان يستغرق وقتا أطول بكثير وذاكرة أكثر من العمل الفعلي لخلق النواتج، وخصوصا عندما يظل البرنامج محتاجا إلى تفسير أو ترجمة. إذا كان البرنامج ينادى في كثير من الأحيان، يمكن لعبء العمل أن يزداد بسرعة على خوادم الشبكة. ومع ذلك، هذه الزيادة تكاد لا تذكر عند استخدام برامج واجهة المعابر المشتركة، مثل تلك الموجودة في لغة السي / لغة السي + +، ويظهر حقا عند استخدام لغة بيرل أو لغات البرمجة الأخرى مع واجهة المعابر العامة، وحتى ذلك الحين فقط على خوادم الشبكة التي تعاني من ارتفاع عبء العمل.

### البدائل

يمكن أن تتبنى العديد من الاتجاهات لمعالجة هذا :
* خوادم الويب الشهيرة طورت آليات التمديد الخاصة بها حتى تسمح لبرامج الطرف الثالث أن تعمل داخل خادم الويب نفسه، على سبيل المثال وحدات Apache والوحدات الإضافيه plug-in Netscape NSAPI في المكونات ،و plug-in IISISAPI.في حين أن هذه الواجهات لم تصل إلى المعايير القياسية التي تحققت عن طريق واجهة المعابر المشتركة، فإنها على الأقل نشرت ونفذت جزئيا على العديد من خوادم الشبكة.
* واجهة المعابر المشتركة البسيطة أو SCGI
* FastCGI يسمح لعملية واحدة تعمل لمدة طويلة أن تتعامل مع أكثر من طلب مستخدم واحد في حين البقاء قريبة لنموذج واجهة المعابر المشتركة، والإبقاء على السهولة في حين القضاء على الكثير من النفقات التي تسببها زوائد واجهة المعابر المشتركة من خلال إنشاء عملية جديدة لكل طلب. وبدلا من تحويل الطلب إلى مكون إضافي لخادم الشبكة ،فإن تطبيقات FastCGI تبقى مستقلة عن خادم الويب.
التكوين الأمثل لأي تطبيق للشبكة يعتمد على تحديد تفاصيل التطبيق، حجم التحميل، وتعقيد المعاملات ؛ هذه المفاضلات بحاجة إلى تحليل لتحديد أفضل تنفيذ لمهمة معينة ولتحديد الوقت اللازم.