دروس

ما هي واجهة البوابة المشتركة (CGI)؟

تعد واجهة البوابة العامة (CGI) معيارًا يحدد كيف يمكن للبرامج الخارجية توفير المعلومات لخوادم الويب. يوفر CGI آلية لخوادم الويب مثل Apache لتبادل البيانات مع لغات البرمجة مثل Perl.

يعد CGI أحد أقدم مكونات البنية التحتية للإنترنت. لا يزال يستخدم على نطاق واسع اليوم ، على الرغم من استبداله ببدائل أحدث.

كان برنامج خادم الويب مقصورًا تقليديًا على خدمة صفحات الويب الثابتة. مكّنت نصوص CGI من إنتاج استجابات ديناميكية ، يتم إنشاؤها عند تلقي طلب.

توحيد خوادم HTTP

تم تصميم CGI لتوفير طريقة موحدة للغات البرمجة للوصول إلى معلومات خادم HTTP. يمكن إقران أي خادم HTTP بأي لغة برمجة ، بشرط أن يلتزم كلاهما بمواصفات CGI.

ستتعامل الخوادم التي تدعم CGI الطلبات باستخدام عملية مشابهة لما يلي:

  1. تلقي طلب جديد: /example.pl.
  2. يتعرف خادم الويب على example.plأنه برنامج نصي CGI قابل للتنفيذ ، لذلك يستدعي البرنامج النصي.
  3. يتلقى البرنامج النصي Perl CGI جميع البيانات المتعلقة بالطلب ، مثل عنوان URL ورؤوس HTTP الخاصة به.
  4. و example.plيدير النصي. سيتم تمرير مخرجاته مرة أخرى إلى خادم الويب للانبعاث كاستجابة HTTP.

يتعارض التدفق الموضح أعلاه بشكل صارخ مع التشغيل المنتظم لخادم الويب. قد يقوم طلب أساسي لـ /example.plإرجاع محتوى هذا الملف. إذا لم يكن الملف موجودًا ، فستتلقى 404ردًا بدلاً من ذلك.

عند استخدام CGI ، لا يحتاج الطلب إلى التعيين إلى ملف حقيقي على القرص. بدلاً من ذلك ، يتم تشغيل برنامج محدد من قبل المستخدم. يتحمل البرنامج مسؤولية إنشاء المخرجات لإرسالها إلى العميل. لم يعد خادم الويب مهتمًا بالمحتوى الفعلي للاستجابة.

تبادل المعلومات عبر CGI

البرنامج الثنائي المنفذ عبر CGI يمكنه الوصول إلى بيانات مختلفة حول طلب HTTP الوارد. يتضمن ذلك عنوان URL والعناوين وسلسلة الاستعلام وطريقة HTTP بالإضافة إلى عنوان IP للعميل البعيد.

برنامج الخادم غير مطلوب لتوفير جميع البيانات حرفياً. تسمح مواصفات CGI للخوادم باستبعاد الرؤوس من متغيرات البيئة. قد يكون هذا هو حذف المعلومات الحساسة – مثل قيمة Authorizationالرأس – أو لتجنب التكرار عندما يمكن الوصول إلى نفس المعلومات باستخدام متغير مخصص.

بالإضافة إلى البيانات المتعلقة بالطلب ، يجب أن تشير الخوادم المتوافقة مع CGI أيضًا إلى تفاصيل مختلفة عن نفسها. يتضمن هذا اسم برنامج الخادم المضيف وإصداره. قد تستخدم البرامج النصية هذه التفاصيل على النحو الذي تراه مناسبًا.

يتم تمرير المعلومات من الخادم إلى برنامج CGI كمتغيرات البيئة. يصل إليها البرنامج بنفس طريقة وصول أي متغير بيئة آخر. سيقوم الخادم بتشغيل البرنامج كعملية فرعية في حد ذاته ، وتحديد متغيرات البيئة قبل استدعاء الملف القابل للتنفيذ.

هناك جزء واحد من البيانات لن يتم تمريره كمتغير بيئة. يتلقى جسم الطلب معاملة خاصة ، حيث يمكن أن تكون طويلة للغاية. سيتم نقل هذا إلى البرنامج النصي على دفق الإدخال القياسي الخاص به. يتم إبلاغ النصوص بحجم البيانات المتاحة عبر CONTENT_LENGTHمتغير البيئة.

بمجرد اكتمال معالجة البرنامج النصي ، يقوم البرنامج النصي CGI بإرجاع استجابة HTTP إلى الخادم. يجب أن تكون هذه استجابة HTTP كاملة تشتمل على رؤوس ونص اختياري. يرسل البرنامج النصي الاستجابة لدفق الإخراج القياسي الخاص به. ثم يرسل الخادم الاستجابة مرة أخرى إلى العميل عبر اتصال HTTP.

أين CGI اليوم؟

ساعدت CGI في ظهور الويب الحديث. لقد وفرت طريقة بسيطة للغاية لإنشاء نصوص برمجية ديناميكية من جانب الخادم باستخدام تقنيات منتصف التسعينيات. لم تعد صفحة الويب ملف HTML ثابت.

ساعدت بساطة CGI على الاستمرار في العقود منذ ذلك الحين. تظل نصوص CGI قيد الاستخدام ، لا سيما في التطبيقات القديمة القائمة على اللغات القديمة. لكن التكنولوجيا لم تقف مكتوفة الأيدي. تم استبدال CGI ببدائل أكثر حداثة مناسبة بشكل أفضل لشبكة الإنترنت اليوم.

يخلق CGI التقليدي عبئًا يصبح مشكلة على نطاق واسع. يتم إعادة تحميل البرنامج النصي CGI عند كل طلب ، مما يؤدي إلى عملية جديدة يمكن أن تستنفد الموارد في المواقع عالية الحركة.

CGI’s محدودة أيضًا من حيث التحكم الذي توفره للبرامج النصية. النصوص البرمجية قادرة فقط على تحديد محتوى الاستجابة المرسل إلى العميل. لا يمكنهم التأثير على أي جزء آخر من تبادل HTTP ، مثل المصادقة أو إدارة الجلسة.

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

تمت معالجة العديد من مشكلات CGI من خلال تقنيات الواجهة الحديثة. تم إنشاء FastCGI لتقليل مشكلة CGI العامة. إنه يعمل بشكل مشابه لـ CGI ولكنه لا ينتج عنه عملية جديدة لكل طلب. بدلاً من ذلك ، يعمل خادم FastCGI بشكل مستقل عن خادم الويب ، ويحافظ على مجموعته الخاصة من العمليات المستمرة المستخدمة لاستضافة البرامج النصية CGI.

في أماكن أخرى ، قامت لغات البرمجة الفردية بتنفيذ واجهات الخادم الخاصة بها. يتم دمجها مباشرة في خوادم الويب ، عادةً من خلال وحدات اختيارية. ومن الأمثلة على أباتشي mod_phpو mod_perlالتي تقدم الدعم الأصلي لتلك غات البرمجة دون استخدام CGI (على الرغم من كل من يمكن استخدامها عبر CGI).

على الرغم من ظهور هذه الآليات ، لا تزال CGI ذات صلة. إن البساطة في صميم تصميمه قد أطلعت على معظم الجهود اللاحقة لتحسين الهيكل العام. على الرغم من أنه من غير المحتمل أن تصادف CGI يومًا بعد يوم في أنظمة الويب الحديثة ، إلا أن خوادم الويب الرئيسية تستمر في دعمها ومن غير المرجح أن يتغير ذلك في أي وقت قريبًا.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى
error: عفوا محتوي هذا الموقع محمي بموجب قانون الألفية للملكية الرقمية !!