في المحاضرة السابقة قمنا بالتعريف بوظائف برامج CGI. اليوم ندخل: الجزء الثاني مفهوم برمجة CGI. محتوى هذه المحاضرة هو الأساس لفهم متعمق لبرامج CGI.
تستخدم هذه السلسلة من المحاضرات دلفي لكتابة برامج CGI لهذا المحتوى، وقد تم تغليف دلفي في فصولها. لكن أعتقد أن من مميزات CGI هو أن هناك العديد من لغات التطوير المتاحة (سيتم ذكر هذه المشكلة أدناه)، ويمكن استخدام محتوى هذه المحاضرة في أي لغة برمجة (بما في ذلك دلفي). لذلك، للاستفادة من CGI، لا يزال محتوى هذه المحاضرة ضروريًا، بالإضافة إلى أن محتوى هذه المحاضرة هو الأساس لفهم متعمق لبرامج CGI.
2. مواصفات CGI:
عادةً ما يكون خادم الويب جهاز كمبيوتر قويًا، ولكن من المستحيل الاستفادة من كل قوة المعالجة. يسمح ظهور CGI للأشخاص باستخدام قوة المعالجة لخادم الويب لتوفير محتوى مثير للاهتمام وديناميكي للعملاء البعيدين. تنطبق مواصفات CGI على خوادم الويب والتطبيقات التي تعمل على الويب. إنه ليس جزءًا من بروتوكول HTTP، لكن معظم خوادم الويب تدعم هذه المواصفات، مثل NCSA httpd وCERN httpd وApache httpd وIIS وOmniHTTPD الذي نستخدمه.
2.1، نظرة عامة على CGI
تحدد CGI مجموعة من القواعد التي يتم اتباعها في التشغيل البيني بين خوادم الويب والمتصفحات والتطبيقات. على سبيل المثال، الاستعلام عن نظام قاعدة البيانات البعيدة من خلال متصفح الويب:
2.2.
يمكن كتابة برامج CGI بأي لغة يمكن تنفيذها على خادم الويب. يجب عليك اختيار اللغة التي تعرفها أكثر والتي تناسب وظيفتك الحالية. على سبيل المثال: لغة Perl مناسبة لمعالجة النصوص والملفات، ولغة C مناسبة أكثر للبرامج الكبيرة والمعقدة، وVisual Basic وDelphi مناسبان لمعالجة قواعد البيانات، وما إلى ذلك. فيما يلي لغات برمجة CGI شائعة الاستخدام:
ج
سي ++
بيرل
تي سي ال
بايثون
مخطوطات شل
فيجوال بيسك
دلفي
أبلسكريبت
2.3، طريقة المجموعة الاستشارية لاندونيسيا:
تسمى طريقة استدعاء CGI بطريقة CGI. هناك ثلاث طرق رئيسية لـ CGI:
2.3.1، طريقة الحصول على:
طريقة GET هي الطريقة التي يستخدمها المتصفح لتقديم طلب إلى خادم الويب. عند استخدام هذه الطريقة، يحصل برنامج CGI على البيانات من متغير البيئة QUERY_STRING. من أجل الحصول على معلمات الإدخال، يجب على برنامج CGI تحليل متغير البيئة هذا. عندما تكون البيانات المراد إرسالها طويلة جدًا، يجب استخدام طريقة POST.
2.3.2، طريقة POST:
عند استخدام طريقة POST، تحصل برامج CGI على بيانات الإدخال من stdin (الإدخال القياسي). نظرًا لعدم وجود EOF (نهاية الملف) في نهاية بيانات الإدخال، يجب أن يستخدم برنامج CGI قيمة CONTENT_LENGTH لمتغير البيئة من أجل قراءة بيانات الإدخال بشكل صحيح. أكبر ميزة لاستخدام هذه الطريقة هي أنها يمكنها نقل كمية كبيرة من البيانات، بينما لا تستطيع طريقة GET نقل كمية كبيرة من البيانات بسبب محدودية طول عنوان URL (لا يزيد بشكل عام عن 1024 بايت). في هذا الوقت، أسلوب POST هو الخيار الوحيد.
2.3.3 طريقة الرأس:
طريقة HEAD هي في الأساس نفس طريقة GET، باستثناء أنها تنقل البيانات من خادم الويب إلى المتصفح. علاوة على ذلك، يتم نقل معلومات رأس HTTP فقط.
2.4 مواصفات الواجهة:
فيما يلي عرض للطرق الأربعة الرئيسية لخوادم الويب للتواصل مع برامج CGI: متغيرات البيئة وسطر الأوامر والإدخال القياسي والإخراج القياسي. (استنادًا إلى الإصدار 1.1 من CGI)
2.4.1 متغيرات البيئة:
AUTH_TYPE: إذا كان الخادم يدعم الإقرارات وكان البرنامج النصي محميًا، فيعطي نوع الإقرار.
CONTENT_LENGTH: يعطي طول البيانات المرسلة باستخدام طريقة POST بالبايت. المتغير فارغ عند استخدام طريقة GET.
CONTENT_TYPE: يعطي نوع البيانات المنقولة عند استخدام طريقة POST. المتغير فارغ عند استخدام طريقة GET. مثل: application/x-www-form-urlencoded.
GETWAY_INTERFACE: قم بإعطاء اسم مواصفات CGI ورقم الإصدار، مثل: CGI/1.1.
PATH_INFO: يعطي معلومات المسار الإضافية بعد اسم برنامج CGI في عنوان URL.
PATH_TRANSLATED: المسار الفعلي لبرنامج CGI، وعادةً ما يكون الدليل الجذر للويب واسم البرنامج النصي ومعلومات المسار الإضافية.
QUERY_STRING: المعلومات الموجودة بعد الحرف "؟" في عنوان URL. يوفر متغير البيئة هذا بيانات الإدخال عند استخدام طريقة GET.
REMOTE_ADDR: عنوان IP للكمبيوتر البعيد الذي يقوم بالطلب.
REMOTE_HOST: اسم الكمبيوتر البعيد الذي يقوم بالطلب.
REMOTE_IDENT: يعطي اسم المستخدم المحدد في RFC 931.
ملاحظة: RFC 931 هو المستند الرسمي للإنترنت، الذي يصف طريقة تأكيد هوية المستخدمين في اتصالات TCP. الوثائق على: http://sunsite.auc.dk/RFC/rfc/rfc931.html.
REMOTE_USER: يعطي اسم المستخدم المعتمد للعميل الذي يقدم الطلب.
REQUEST_METHOD: طريقة تقديم الطلب، والتي يمكن أن تكون GET وHEAD وPOST.
SCRIPT_NAME: المسار الظاهري لتنفيذ برنامج CGI، مثل: /cgi-bin/query.cgi.
SERVER_NAME: اسم المجال أو عنوان IP الخاص بالكمبيوتر الذي يقوم بتشغيل برنامج خادم الويب، مثل: www.chinabyte.com.
SERVER_PORT: رقم منفذ خادم الويب، القيمة الافتراضية هي 80.
SERVER_PROTOCOL: اسم البروتوكول ورقم الإصدار الذي يستخدمه خادم الويب، مثل: HTTPD/1.0.
SERVER_SOFTWARE: اسم خادم الويب الذي ينفذ برامج CGI. التنسيق هو "اسم الخادم/رقم الإصدار"، مثل: NCSA/1.5b5.
HTTP_ACCEPT: "Acccpect: سطر الرأس" الذي يرسله العميل، المطابق لنوع MIME الذي يمكن للعميل التعامل معه، بتنسيق "النوع/النوع الفرعي، النوع/النوع الفرعي، وما إلى ذلك"، مثل: */*، الصورة/ جيف، صورة / JPEG.
HTTP_REFERER: نعم المُحيل: دليل سطر الرأس، الذي يحتوي على عنوان URL للنموذج (Form) عند تقديم طلب CGI، مثل: http://www.chinabyte.com/register.form.
HTTP_USER_AGENT: اسم متصفح العميل الذي قدم الطلب، مثل: Mozilla/1.2N (Windows;I;32bit).
يمكنك رؤية متغيرات البيئة المذكورة أعلاه باستخدام البرنامج التوضيحي في المحاضرة السابقة.
2.4.2، سطر الأوامر:
يتم استخدام سطر أوامر CGI فقط عند الاستعلام باستخدام ISINDEX. استعلام ISINDEX هو استعلام خاص محاط بين <ISINDEX> و<BASE HREP="..">. يمكن أن يأخذ سطر الأوامر معلمات متعددة.
2.4.3 المدخلات القياسية:
عند استخدام طريقة POST، يحصل برنامج CGI على البيانات المرسلة من stdin. كما ذكرنا سابقًا، يجب استخدام قيم متغيرات البيئة CONTENT_TYPE وCONTENT_LENGTH. ما يجب ملاحظته هو أن عنوان URL الموجود في البيانات مشفر، مثل استبدال المسافات بعلامات الجمع، واستبدال ~ بـ %7E، وما إلى ذلك.
2.4.4 الإخراج القياسي:
ترسل برامج CGI البيانات إلى المتصفح من خلال الإخراج القياسي، أو الأوامر التي يمكن تفسيرها بواسطة خادم الويب. يمكن لبرامج CGI التحدث إلى المتصفح من خلال خادم الويب، ويجب أن تبدأ أسماء برامجها بـ "nph-"، والتي تمثل معلومات الرأس غير المحللة. يعد برنامج CGI مسؤولاً عن صحة معلومات رأس HTTP التي يتم إرجاعها إلى المتصفح.
عند عدم استخدام برنامج nph، يبحث الخادم عن ثلاثة رؤوس خاصة قد ترجعها CGI:
نوع المحتوى: معلومات رأس نوع MIME، مثل: عند إدخال HTML، يتم استخدام "نوع المحتوى: نص/html" بشكل شائع.
الموقع: أخبر الخادم أنك تشير إلى مستند آخر. يقوم الخادم إما بإعادة توجيه العميل أو إرسال محتوى المستند، اعتمادًا على ما إذا كان عنوان URL مسارًا كاملاً أو مسارًا نسبيًا.
الحالة: سطر الحالة الذي يرسله الخادم إلى العميل. التنسيق هو: nnnXXXXX، وnnn عبارة عن رمز مكون من ثلاثة أرقام، وXXXXXX هو نص الوصف المقابل.