كيف يعمل الويب من جهة الخادم؟
ماذا يحدث بين ضغطك على رابط وظهور الصفحة؟ ⏱ نحو 25 دقيقة.
- تميّز الواجهة الأمامية من الواجهة الخلفية ودور كل منهما.
- تشرح رحلة الطلب في نموذج العميل والخادم.
- تقرأ أجزاء طلب
HTTPواستجابته، وتفسّر رموز الحالة. - تحلّل وظائف تطبيق إلى طلبات
GETوPOST.
١الواجهة الأمامية والواجهة الخلفية
في مقرر 131 بنيت الواجهة الأمامية Front-end: ما يراه المستخدم ويتفاعل معه في المتصفح. لكن أغلب المواقع تحتاج جزءًا آخر لا يراه أحد: الواجهة الخلفية Back-end، وهي برنامج يعمل على جهاز بعيد اسمه الخادم Server.
فكّر في مطعم: الصالة والقائمة والنادل هي الواجهة الأمامية، والمطبخ هو الواجهة الخلفية. الزبون لا يدخل المطبخ، بل يطلب، فيُحضَّر الطلب في الداخل ويصله جاهزًا.
| الواجهة الأمامية | الواجهة الخلفية | |
|---|---|---|
| أين تعمل؟ | في متصفح المستخدم | على الخادم |
| اللغات | HTML و CSS و JavaScript | PHP (مقررنا)، أو بايثون، أو Node.js، أو Java… |
| مهامها | العرض والتنسيق والتفاعل | حفظ البيانات، والتحقق من كلمة المرور، والحسابات، وإرسال البريد |
| من يرى الكود؟ | أي مستخدم (اعرض مصدر الصفحة) | لا أحد غير المطوّر: المستخدم يرى النتيجة فقط |
لماذا لا نضع كل شيء في المتصفح؟ لأن ما في المتصفح يستطيع المستخدم قراءته وتغييره. فالتحقق من كلمة المرور، أو حساب سعر الطلب، أو حفظ بيانات كل المستخدمين، يجب أن يتم في مكان موثوق: الخادم.
٢رحلة الطلب: العميل والخادم
كل صفحة تفتحها هي حوار قصير بين طرفين: العميل Client (المتصفح) يرسل طلبًا Request، والخادم يرد بـاستجابة Response. هذا هو نموذج العميل والخادم.
- تكتب العنوان
http://localhost/hello.phpأو تضغط رابطًا أو ترسل نموذجًا، فيرسل المتصفح طلب HTTP. - يستقبل برنامج الخادم (مثل Apache) الطلب، ويجد الملف
hello.php، فيسلّمه لـ PHP ليشغّله. - كود PHP يقرأ ما في الطلب، وقد يسأل قاعدة البيانات، ثم يطبع صفحة HTML.
- يعيد الخادم ما طبعه الكود في استجابة HTTP، فيعرضها المتصفح كأي صفحة عادية.
٣شكل طلب HTTP
الطلب رسالة نصية بسيطة. هذا ما يرسله المتصفح فعلًا حين تفتح hello.php?name=سعود:
GET /hello.php?name=سعود HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Windows NT 10.0) Chrome/130 Accept: text/html Accept-Language: ar
| الجزء | مثاله | معناه |
|---|---|---|
| الطريقة Method | GET | ماذا تريد؟ GET تعني «أعطني». وPOST تعني «خذ هذه البيانات». |
| المسار Path | /hello.php | أي ملف أو مورد تطلب من الخادم. |
| سلسلة الاستعلام Query string | ?name=سعود | بيانات صغيرة بعد علامة ؟ على شكل اسم=قيمة. |
| الترويسات Headers | Host: localhost | معلومات إضافية: اسم الموقع، ونوع المتصفح، واللغة، والكوكيز. |
| الجسم Body | (فارغ هنا) | بيانات كبيرة يرسلها العميل، مثل محتوى نموذج التسجيل. يأتي بعد سطر فارغ. |
وأشهر طريقتين ستستخدمهما في المقرر كله:
| الطريقة | متى؟ | أين البيانات؟ |
|---|---|---|
GET | لجلب صفحة أو بيانات: فتح صفحة، بحث، تصفية | في الرابط نفسه بعد ؟ |
POST | لإرسال بيانات تغيّر شيئًا: تسجيل، دخول، إضافة طلب | في جسم الطلب، لا تظهر في الرابط |
٤شكل استجابة HTTP
ويرد الخادم برسالة لها الشكل نفسه تقريبًا: سطر الحالة، ثم الترويسات، ثم سطر فارغ، ثم الجسم (محتوى الصفحة):
HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Content-Length: 61 <h1>أهلًا يا سعود</h1><p>وصل طلبك بالطريقة: GET</p>
أهم ما في الاستجابة رمز الحالة Status code: رقم من ثلاث خانات يلخّص النتيجة، وأول خانة تحدد عائلته:
| العائلة | المعنى | أشهر الرموز |
|---|---|---|
| 2xx نجاح | تم الطلب بنجاح | 200 OK نجح. 201 Created أُنشئ عنصر جديد. |
| 3xx تحويل | اذهب إلى عنوان آخر | 301 نُقلت الصفحة نهائيًّا. 302 Found اذهب مؤقتًا إلى العنوان في الترويسة Location. |
| 4xx خطأ من العميل | الطلب نفسه فيه مشكلة | 400 بيانات غير صحيحة. 401 سجّل دخولك أولًا. 403 ممنوع. 404 Not Found غير موجود. |
| 5xx خطأ في الخادم | الطلب سليم لكن الخادم فشل | 500 Internal Server Error غالبًا خطأ في كود PHP. |
٥صفحة ثابتة أم صفحة ديناميكية؟
ملف about.html ثابت Static: يرسله الخادم كما هو لكل زائر. أما ملف PHP فهو ديناميكي Dynamic: يشغّله الخادم مع كل طلب، فقد يبني صفحة مختلفة لكل زائر.
هذا خادم صغير حقيقي يعمل داخل صفحتك. الملف نفسه استقبل ثلاثة طلبات، فرد على كل واحد بصفحة مختلفة. اضغط أي سطر في السجل لترى الطلب والاستجابة كاملين:
<?php// hello.php: صفحة واحدة، وردود مختلفة حسب الطلب$name = $_GET['name'] ?? 'زائر';echo "<h1>أهلًا يا $name</h1>";echo "<p>وصل طلبك بالطريقة: " . $_SERVER['REQUEST_METHOD'] . "</p>";
لا تقلق من تفاصيل الكود الآن؛ ستكتب مثله في الدرسين القادمين. لاحظ فقط: الطلب الثالث بلا اسم، فاستخدم الكود القيمة البديلة «زائر».
والأهم: افتح تبويب 📄 المصدر في أي استجابة. لن تجد فيها $name ولا echo، بل HTML فقط. فكود PHP يبقى على الخادم، ولا يصل للمتصفح إلا ناتجه.
٦حلّل قبل أن تبرمج: ما الطلبات التي يحتاجها التطبيق؟
قبل كتابة أي كود في الواجهة الخلفية، اسأل: ما الوظائف المطلوبة؟ وكل وظيفة تتحول إلى طلب يصل الخادم. مثال: «صفحة تسجيل في دورة تدريبية؛ يملأ المتدرب نموذجًا، ثم يرى رسالة تأكيد. ويستطيع المشرف رؤية قائمة المسجلين».
| الوظيفة | الطلب | ماذا يفعل الخادم؟ |
|---|---|---|
| عرض نموذج التسجيل | GET /register.php | يرسل صفحة فيها النموذج. |
| إرسال بيانات التسجيل | POST /register.php | يتحقق من البيانات، ويحفظها، ثم يرد برسالة تأكيد. |
| عرض قائمة المسجلين | GET /list.php | يتأكد أن الطالب مشرف، ثم يقرأ المسجلين ويبني جدولًا. |
| البحث عن متدرب | GET /list.php?q=سعود | مثل السابق، لكن يعرض من يطابق البحث فقط. |
لاحظ القاعدة: الجلب والعرض والبحث بـ GET، وإرسال بيانات جديدة بـ POST. هذا الجدول البسيط هو أول وثيقة تصميم لأي واجهة خلفية.
٧تعرّف على مختبر الخادم
في هذا المقرر لن تحتاج تثبيت أي شيء لتجرّب: كل مثال فيه زر ✏️ جرّب وعدّل يفتح مختبر الخادم، وهو PHP 8.2 حقيقي يعمل داخل متصفحك. وفي المختبر:
- 🌐 المتصفح: متصفح مصغّر تكتب فيه العنوان. الروابط والنماذج داخله تعمل وترسل طلبات حقيقية لخادمك.
- 📮 طلب يدوي: تختار الطريقة وتكتب الرابط وجسم الطلب بنفسك، مثل أداة
Postmanالتي يستخدمها المطوّرون. - 🍪 الكوكيز و📜 السجل: ترى ما يحفظه المتصفح، وكل طلب أُرسل واستجابته (الدرس 8).
توقّع وتحقّق
أين يعمل كود PHP؟
رمز الحالة 404 يعني:
4xx: مشكلة في الطلب.لإرسال بيانات نموذج تسجيل جديد نستخدم غالبًا:
في الطلب GET /search.php?q=قهوة ، الجزء ?q=قهوة يسمى:
Query string: اسم=قيمة بعد علامة ؟الخلاصة
- الواجهة الخلفية برنامج على الخادم: يحفظ البيانات ويتحقق ويحسب، والمستخدم لا يرى كودها.
- المتصفح يرسل طلب
HTTP، والخادم يشغّلPHPويرد باستجابةHTTP. - الطلب: طريقة + مسار + ترويسات + جسم. الاستجابة: رمز حالة + ترويسات + جسم.
GETلجلب البيانات (في الرابط)، وPOSTلإرسال بيانات تغيّر شيئًا (في الجسم).- رموز الحالة:
2xxنجاح،3xxتحويل،4xxخطأ في الطلب،5xxخطأ في الخادم.
تحدٍّ تصميمي: حلّل واجهة خلفية لمكتبة الكلية
سهلمكتبة الكلية تريد موقعًا بسيطًا: «يبحث المتدرب عن كتاب بعنوانه، ويرى تفاصيل كتاب معيّن، ويحجز كتابًا متاحًا. ويضيف أمين المكتبة كتبًا جديدة». قبل أي كود، حلّل الطلبات في جدول كالذي في القسم 6، ثم سلّمه لمعلمك.
- اكتب كل وظيفة في صف: الوظيفة، والطريقة والمسار، وماذا يفعل الخادم.
- اختر GET أو POST لكل وظيفة، وعلّل اختيارك بجملة.
- اقترح رمز الحالة المناسب لحالتين: كتاب غير موجود، وحجز ناجح.