الهدف الرئيسي لهذا المختبر هو إنشاء خادم ويب CGI HTTP استنادًا إلى RFC/1945. تم بناء الخادم على برمجة C Socket والتجريد المستفادة حتى الآن في Inet 4021 - برمجة الشبكة.
بالإضافة إلى ذلك ، يجب أن يكون الخادم فعالًا فيما يتعلق بالسرعة وتخصيص الموارد.
يستخدم خادمنا CGI كتجريد لأخذ المدخلات من نموذج HTML ثم إرجاع الإخراج. ليس لدى العميل أي فكرة أن CGI موجود ولكنه سعيد عندما يتلقى رد ، بغض النظر عن من.
بالنسبة لخوارزميةنا ، يأخذ الخادم إدخاله ، ثم يقوم بتوزيعها للعثور على ما إذا كان طلبًا/الحصول على طلب ، ثم يرسل البيانات إلى CGI للمعالجة.
/CGI -BIN - هذا يحتوي على ملفات CGI الخاصة بنا المستخدمة للتعامل مع المنشور والحصول على الطلبات (حيث يوجد خادم الويب القابل للتنفيذ).
عندما يرسل العميل طلبًا/الحصول على خادم ، سيتصل الخادم بـ CGI قابل للتنفيذ للتعامل مع الطلب. الاستخدام الرئيسي لهذا هو السماح للتنفيذ بالتعامل مع العمل ، في حين أن الخادم يمرره فقط ثم يمكنه التعامل مع طلبات جديدة. هذا استخدام جيد لتخصيص الموارد ويساعد في دعم المزيد من المستخدمين بشكل متزامن.
/conf - يحتوي مجلد التكوين على ملف httpd.conf وهو ملف تكوين للخادم. ينص على مقدار المستخدمين المتزامنين ، وموقع محتوى الجذر ، وموقع الفهرس ، والمنفذ الذي سيتم تشغيله.
/المحتويات - كل من .html ، .gif ، .jpg (المحتويات) يقيم في هذا المجلد. عند استلام index.html ، يرسل طلبات لجميع هذه الملفات. تُستخدم هذه الملفات لعمل صفحة الويب التي يتم عرضها على متصفح العميل.
/سجلات - يحتوي هذا المجلد على ملفات السجل لجميع أوامر الوصول وكذلك الأخطاء. سوف ينتقل المعيار Out إلى سجل Access وتنتقل جميع سجلات الأخطاء الأخرى إلى سجل الأخطاء.
/SRC - هذا هو المكان الذي يوجد فيه كل رمز المصدر. هذا هو في الأساس المجلد الذي يوجد فيه الخادم.
index.html - فهرس دليل خادم الويب
لتجميع GET and Post CGI ، قم بالتغيير إلى دليل /src . تجميع ملف C. يمكن القيام بذلك بواسطة
gcc POST.c -o ../cgi-bin/POST.cgi && gcc GET.c -o ../cgi-bin/GET.cgi
لاختبار الخادم ، انتقل إلى دليل /src . تجميع ملف C وقم بتشغيله. يمكن القيام بذلك عن طريق:
gcc server.c && ./a.out
سيتم تشغيل الخادم بناءً على المحتويات المحددة في ملف التكوين. إذا لم تتغير ، ستعود المحطة:
Number of simultaneous connections: 10
Root directory (to start looking for HTML files): ../contents/
Index filename (if none given): /index.html
Port to run on server: 8080
الآن ، باستخدام متصفح الويب ، أدخل "http: // localhost: 8080/". سيؤدي ذلك إلى تحميل ملف index.html وعرض صفحة الويب. بالإضافة إلى ذلك ، يمكنك تحميل ملفات معينة عن طريق "http: // localhost: 8080/filename". إذا كان الملف موجودًا ، فسيتم عرضه (كما هو موضح أدناه). خلاف ذلك ، سيكون هناك Error 404 - File Not Found .

قبل أن نبدأ ، من المهم أن نلاحظ أنه عندما يرسل الخادم رسالة إلى عميل متصفح الويب ، يسبقه رأس HTTP. مثال على ذلك هو:
HTTP/1.0 404 Not Found
Content-Type: text/plain
Content-Length: 25
Connection: close
Last-Modified: Mon, 23 Mar 2020 02:49:28 GMT
Expires: Sun, 17 Jan 2038 19:14:07 GMT
Date: Mon, 23 Mar 2020 04:49:28 GMT
HTTP 404 - File not found
هذا هو إرسال خطأ مرة أخرى إلى عميل HTTP لأنه لا يمكن العثور على الملف المطلوب. تستخدم النماذج الأخرى "200 OK" و "500 Enternal Server Error" و "501 لم يتم تنفيذها" ، بدلاً من "404 غير موجود" ، ولكنها تحمل نفس النموذج. يمكنك تحرير السطر الثاني بناءً على المحتوى الذي ترسله. يمكنك بعد ذلك إرسال البيانات بعد سطرين جديدين.
عندما يطلب العميل ملفًا ، يتلقى الخادم طلب الحصول على. قد يكون لكل طلب العديد من المكالمات التكرارية إلى الخادم لملفات الإضافة ، مثل طلب index.html للاتصال بصور أخرى. ثم يرسل الخادم الطلب إلى CGI (واجهة البوابة المشتركة). الهدف من استخدام CGI هو لتفاعلات الويب الديناميكية ، مثل النموذج ، عن طريق إضافة تطبيقات الواجهة الخلفية التي تأخذ البيانات (المدخلات) من نموذج HTML. نوع آخر من الطلبات هو منشور. هذا هو عندما يرسل العميل البيانات إلى الخادم. سنقدم مثالًا لكل منهما.
مثال على ذلك: إذا انتقلت إلى "http: // localhost: 8080/form.htm" ، فيمكنك إرسال رسالة منشور إلى الخادم. سيتم إرسال النموذج إلى خادم ويب CGI القابل للتنفيذ كطلب بعد. يأخذ نموذج المثال الخاص بنا في مدخلات كلمتين ، يرسل النموذج والبيانات إلى CGI ، و CGI يرسل النموذج والمحتوى (وهو السلسلة المتسلسلة). هذا مثال على كيفية تعامل CGI مع طلبات البريد.
احصل على مثال: هذا هو عندما يحاول العميل الحصول على ملف من الخادم. يحدث هذا بشكل متكرر ، خاصةً عند طلب ملف <index.htm>. يحاول CGI العثور على الملف ، إذا لم يتمكن من إرسال خطأ 404 غير موجود ، الموجود أعلاه ، للعميل.
إذا تم العثور على الملف ، فإن الخادم يرسل طلبًا مرة أخرى ، مثل
HTTP/1.0 200 OK
Content-Type: image/gif
Content-Length: 1231
Cache-Control: no-cache
Connection: Keep-Alive
Last-Modified: Mon, 23 Mar 2020 02:49:28 GMT
Expires: Sun, 17 Jan 2038 19:14:07 GMT
Date: Mon, 23 Mar 2020 04:49:28 GMT
CONTENT
الجزء الأول من النص هو رأس HTTP. سيتم استبدال المحتوى بمحتويات الملف. ثم يعرض المتصفح هذا المحتوى. هذه هي الطريقة التي تحصل بها مقابض CGI على طلبات.
على افتراض أن العميل هو المستخدم والمسؤول هو الخادم ...
المسؤول - الغرض من هذا المشروع للمسؤولين هو معرفة كيفية التعامل مع المنشور والحصول على الطلبات في خادم ويب قابل للتنفيذ. تساعد برمجة الخادم أيضًا في فهم كيفية إرسال رؤوس HTTP والتواصل مع صفحة ويب ، بالإضافة إلى تصفح الملفات وإرسالها إلى صفحة ويب.
المستخدم - الغرض من هذا المشروع للمستخدمين هو معرفة كيفية التنقل في صفحات الويب وما تعني بعض الأخطاء عند استلامها. على سبيل المثال ، إذا كانت محاولة تحميل ملف من الخادم غير موجود ، فسيكون هناك خطأ 404 غير موجود.