Skip to content

الرحلة الكاملة لطلب واحد

مقدمة

عندما تكتب عنوان موقع في المتصفح وتضغط Enter، حتى تظهر الصفحة، ماذا يحدث بالضبط في المنتصف؟ هذا السؤال هو سؤال كلاسيكي في المقابلات، وهو أيضًا المفتاح لفهم معمارية الويب بأكملها. فهم هذه السلسلة، يمكنك فهم كيفية تعاون الواجهة الأمامية والخلفية والشبكة وقاعدة البيانات.

ماذا ستتعلم في هذا المقال؟

بعد إكمال هذا الفصل، ستكتسب:

  • رؤية السلسلة الكاملة: فهم العملية الكاملة لطلب HTTP من الإرسال إلى العودة
  • معرفة مسؤوليات كل طبقة: ما تفعله DNS، TCP، موازنة الحمل، خادم الويب، خادم التطبيق، قاعدة البيانات
  • قدرة تحديد المشكلات: معرفة من أي طبقة تبدأ التحقيق عندما يكون الطلب بطيئًا أو فاشلاً
  • أفكار تحسين الأداء: كل طبقة لديها مساحة للتحسين، معرفة أين تكمن نقاط التحسين
الفصلالمحتوىالمفاهيم الأساسية
الفصل 1المتصفح يبدأ الطلبتحليل DNS، اتصال TCP، طلب HTTP
الفصل 2النقل عبر الشبكةالتوجيه، CDN، موازنة الحمل
الفصل 3معالجة الخادمخادم الويب، منطق التطبيق، استعلام قاعدة البيانات
الفصل 4عودة الاستجابةالتسلسل، الضغط، العرض
الفصل 5تحسين السلسلة الكاملةالتخزين المؤقت، إعادة استخدام الاتصال، المعالجة غير المتزامنة

0. النظرة الشاملة: ماذا يمر به الطلب؟

لنستخدم تشبيهًا للفهم: أنت تطلب كتابًا عبر الإنترنت، هذه العملية مشابهة بشكل مذهل لطلب HTTP.

مرحلة الطلبتشبيه شراء الكتابالمقابل التقني
إدخال العنوانتقول "أريد الذهاب إلى مكتبة كذا"المتصفح يحلل URL
تحليل DNSتبحث في الخريطة لتجد عنوان المكتبةاسم النطاق → عنوان IP
اتصال TCPتمشي إلى باب المكتبة، تدفع الباب وتدخلمصافحة ثلاثية لإنشاء الاتصال
إرسال الطلبتخبر الموظف "أريد كتاب xxx"رسالة طلب HTTP
معالجة الخادمالموظف يذهب للمخزن للبحث عن الكتاب، يفحص المخزون، يحسب السعرمنطق التطبيق + استعلام قاعدة البيانات
عودة الاستجابةالموظف يعطيك الكتابرسالة استجابة HTTP
عرض المتصفحتفتح الكتاب وتبدأ القراءةتحليل وعرض HTML/CSS/JS

1. المتصفح يبدأ الطلب

1.1 تحليل URL

عندما تدخل https://api.example.com/books?id=123، يقوم المتصفح بتفكيكه إلى عدة أجزاء:

الجزءالقيمةالمعنى
البروتوكولhttpsالتواصل بطريقة مشفرة
اسم النطاقapi.example.com"اسم" الخادم
المسار/booksالمورد المراد الوصول إليه
معاملات الاستعلامid=123شروط إضافية

1.2 تحليل DNS: اسم النطاق → عنوان IP

الكمبيوتر لا يتعرف على أسماء النطاقات، بل يتعرف فقط على عناوين IP (مثل 93.184.216.34). DNS هو "دليل الهاتف" للإنترنت.

تخزين المتصفح المؤقت → تخزين النظام المؤقت → تخزين الموجه المؤقت → ISP DNS → خادم اسم النطاق الجذري
     ↓ إذا وجد يستخدم مباشرة، وإلا يتابع البحث للأسفل

أهمية تخزين DNS المؤقت

إذا كان كل طلب يبدأ البحث من خادم اسم النطاق الجذري، فسيتم سحق الإنترنت العالمي باستعلامات DNS. لذلك كل طبقة لديها تخزين مؤقت، معظم الطلبات يمكن إكمال تحليلها في طبقة المتصفح أو النظام.

1.3 المصافحة الثلاثية لـ TCP

بعد العثور على عنوان IP، يحتاج المتصفح إلى "إنشاء اتصال" مع الخادم. TCP يستخدم المصافحة الثلاثية لضمان أن كلا الطرفين جاهزان:

العميل → الخادم: مرحبًا، أريد الاتصال (SYN)
الخادم → العميل: حسنًا، أنا جاهز (SYN + ACK)
العميل → الخادم: تم الاستلام، ابدأ التواصل (ACK)

إذا كان HTTPS، يحتاج أيضًا مصافحة TLS إضافية للتفاوض على طريقة التشفير.

1.4 إرسال طلب HTTP

بعد إنشاء الاتصال، يرسل المتصفح رسالة طلب HTTP:

http
GET /books?id=123 HTTP/1.1
Host: api.example.com
Accept: application/json
Authorization: Bearer eyJhbGci...
User-Agent: Chrome/120.0
المكونالمحتوى
سطر الطلبالطريقة (GET) + المسار + إصدار البروتوكول
رؤوس الطلبمعلومات وصفية: المصادقة، تنسيق البيانات المتوقع إلخ
جسم الطلبفقط لطلبات POST/PUT، يحمل البيانات المراد تقديمها

2. النقل عبر الشبكة: الطلب في الطريق

2.1 التوجيه وإعادة التوجيه

بعد مغادرة الطلب لجهاز الكمبيوتر الخاص بك، يمر عبر توجيه عدة موجهات، مثل الطرد الذي يمر عبر عدة محطات نقل:

جهازك → موجه المنزل → شبكة المزود → الشبكة الأساسية → مركز البيانات المستهدف

كل موجه يقرر "الخطوة التالية" للتوجيه بناءً على عنوان IP. يمكن استخدام أمر traceroute لعرض العقد التي مر بها الطلب.

2.2 تسريع CDN

إذا كان الموقع المستهدف يستخدم CDN (شبكة توزيع المحتوى)، فقد لا يحتاج الطلب للوصول إلى الخادم المصدر:

السيناريوالمسار
طلب موارد ثابتة (صور، CSS، JS)عقدة CDN الطرفية تعيد مباشرة
طلب بيانات ديناميكية (API)يخترق CDN، يصل إلى الخادم المصدر

جوهر CDN هو "وضع المحتوى مسبقًا في أقرب مكان للمستخدم".

2.3 موازنة الحمل

المواقع الكبيرة ليس لديها خادم واحد فقط. موازن الحمل مسؤول عن توزيع الطلبات على خوادم متعددة:

طلب المستخدم → موازن الحمل → الخادم A (30% من المرور)
                            → الخادم B (30% من المرور)
                            → الخادم C (40% من المرور)

استراتيجيات التوزيع الشائعة:

الاستراتيجيةالمبدأالسيناريو المناسب
التناوبالتوزيع بالتسلسلالخوادم متطابقة في التكوين
التناوب الموزونالتوزيع حسب الأوزانالخوادم مختلفة في التكوين
تجزئة IPنفس المستخدم يثبت على نفس الخادمالحاجة لاستمرارية الجلسة
أقل اتصالاتالتوزيع على الأقل اتصالات حاليًااختلاف كبير في وقت معالجة الطلبات

3. معالجة الخادم: ماذا يحدث في المطبخ

بعد وصول الطلب للخادم، يمر عبر معالجة متعددة الطبقات.

3.1 خادم الويب (Nginx / Apache)

أول من يستقبل الطلب عادة هو خادم الويب، مسؤول عن:

المسؤوليةالوصف
خدمة الملفات الثابتةإعادة HTML، CSS، JS، الصور مباشرة
الوكيل العكسيإعادة توجيه طلبات API إلى تطبيق الخلفية
إنهاء SSLمعالجة تشفير وفك تشفير HTTPS
تصفية الطلباتاعتراض الطلبات الخبيثة، تحديد المعدل

3.2 معالجة خادم التطبيق

خادم الويب يعيد توجيه الطلب إلى خادم التطبيق (Node.js، Spring، Django إلخ)، تدفق المعالجة:

دخول الطلب → سلسلة الوسائط → مطابقة المسار → المتحكم → طبقة الخدمة → طبقة الوصول للبيانات

ما تفعله الوسائط:

  1. تحليل جسم الطلب (JSON، بيانات النموذج)
  2. التحقق من الهوية (فحص Token)
  3. فحص الصلاحيات (هل يمكن لهذا المستخدم الوصول لهذه الواجهة؟)
  4. تسجيل السجل (من زار ماذا ومتى)

3.3 استعلام قاعدة البيانات

معظم الطلبات تتعامل في النهاية مع قاعدة البيانات:

كود التطبيق: SELECT * FROM books WHERE id = 123

محرك قاعدة البيانات: تحليل SQL → تحسين الاستعلام → خطة التنفيذ → قراءة البيانات

إعادة النتيجة: { id: 123, title: "xxx", price: 59.9 }

قاعدة البيانات هي أكثر عنق زجاجة أداء شيوعًا

نقل الشبكة عادة مستوى المللي ثانية، منطق التطبيق أيضًا سريع، لكن استعلام قاعدة بيانات بدون فهرس قد يستغرق عدة ثوانٍ أو حتى عشرات الثواني. لذلك "الطلب البطيء" على الأرجح هو استعلام قاعدة بيانات بطيء.


4. عودة الاستجابة: طريق عودة البيانات

4.1 بناء استجابة HTTP

بعد معالجة الخادم، يبني رسالة الاستجابة:

http
HTTP/1.1 200 OK
Content-Type: application/json
Content-Encoding: gzip
Cache-Control: max-age=3600

{"id": 123, "title": "xxx", "price": 59.9}
المكونالمحتوى
سطر الحالةإصدار البروتوكول + رمز الحالة (200 نجاح، 404 غير موجود، 500 خطأ خادم)
رؤوس الاستجابةتنسيق البيانات، استراتيجية التخزين المؤقت، طريقة الضغط إلخ
جسم الاستجابةمحتوى البيانات الفعلي (JSON، HTML إلخ)

4.2 ضغط البيانات

الخادم عادة يضغط جسم الاستجابة بـ gzip أو brotli، لتقليل حجم النقل:

خوارزمية الضغطنسبة الضغطالسرعة
gzipحوالي 70%سريع
brotliحوالي 80%أبطأ لكن ضغط أفضل

JSON بحجم 100KB، بعد الضغط قد يكون 20-30KB فقط.

4.3 عرض المتصفح

بعد استلام المتصفح للاستجابة:

  1. تحليل HTML → بناء شجرة DOM
  2. تحليل CSS → بناء شجرة الأنماط
  3. الدمج → توليد شجرة العرض
  4. التخطيط → حساب موقع وحجم كل عنصر
  5. الرسم → رسم البكسل على الشاشة

5. تحسين السلسلة الكاملة: كل طبقة يمكن أن تكون أسرع

5.1 وسائل التحسين لكل طبقة

الطبقةوسائل التحسينالتأثير
DNSتحليل DNS مسبق، استخدام خدمة DNS سريعةتقليل وقت استعلام DNS
الشبكةCDN، HTTP/2، إعادة استخدام الاتصالتقليل تأخير النقل
الخادمتخزين مؤقت (Redis)، معالجة غير متزامنةتقليل وقت المعالجة
قاعدة البياناتفهارس، تحسين الاستعلام، فصل القراءة والكتابةتقليل وقت الاستعلام
الواجهة الأماميةتحميل كسول، تقسيم الكود، ضغط المواردتقليل وقت العرض

5.2 التخزين المؤقت: التحسين الأكثر فعالية

التخزين المؤقت موجود في كل طبقة من سلسلة الطلب:

تخزين المتصفح المؤقت → تخزين CDN المؤقت → تخزين الوكيل العكسي المؤقت → تخزين التطبيق المؤقت (Redis) → تخزين قاعدة البيانات المؤقت

جوهر التخزين المؤقت

استبدال المساحة بالوقت. تخزين النتائج المحسوبة، واستخدامها مباشرة في المرة القادمة، دون إعادة الحساب. كل زيادة 10% في معدل إصابة التخزين المؤقت، قد يتحسن أداء النظام عدة أضعاف.

5.3 أفكار التحقيق عند فشل الطلب

الظاهرةالطبقة المحتملة للمشكلةطريقة التحقيق
لا استجابة تمامًاDNS / الشبكةping، nslookup
انتهاء مهلة الاتصالالشبكة / تعطل الخادمtelnet، curl
إرجاع 4xxخطأ في طلب العميلفحص URL، المعاملات، Token
إرجاع 5xxخطأ داخلي في الخادمعرض سجلات الخادم
استجابة بطيئة جدًاقاعدة البيانات / منطق التطبيقعرض سجل الاستعلامات البطيئة، أدوات APM

6. الخلاصة

الرحلة الكاملة لطلب HTTP:

  1. المتصفح: تحليل URL → استعلام DNS → اتصال TCP → إرسال الطلب
  2. الشبكة: توجيه وإعادة توجيه → تحكيم CDN → توزيع موازنة الحمل
  3. الخادم: استقبال خادم الويب → معالجة الوسائط → منطق الأعمال → استعلام قاعدة البيانات
  4. العودة: بناء الاستجابة → الضغط → نقل الشبكة → عرض المتصفح

قيمة فهم السلسلة الكاملة

عندما يمكنك رسم السلسلة الكاملة للطلب في ذهنك، يمكنك تحديد أي طبقة بها مشكلة بسرعة عند مواجهة أي مشكلة. هذا هو القفزة الأساسية من "مطور مبتدئ" إلى "قادر على التحقيق المستقل في المشكلات".


قراءة إضافية