Skip to content

بروتوكول HTTP: "لغة التواصل" بين الواجهة الأمامية والخلفية

🎯 السؤال الأساسي

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


0. جوهر HTTP

HTTP (HyperText Transfer Protocol، بروتوكول نقل النص الفائق) هو البروتوكول الأساسي للتواصل بين الواجهة الأمامية والخلفية.

0.1 التشبيه بالحوار

عنصر الحوارمقابل HTTPالوصف
اللغةبروتوكول HTTPلغة يفهمها الطرفان
القواعدتنسيق الطلب/الاستجابةكيف "نتحدث"
التدفقنمط طلب-استجابةسؤال وجواب
النهايةإنهاء المكالمةإغلاق اتصال TCP

1. تاريخ تطور HTTP

منذ ولادته عام 1991، مر HTTP بترقيات رئيسية متعددة.

🌐HTTP Protocol Demo
📤HTTP request
GET/api/users/123HTTP/1.1
Host:api.example.com
User-Agent:Mozilla/5.0
Accept:application/json
Authorization:Bearer xxx
TCP connection
📥HTTP response
HTTP/1.1200OK
Content-Type:application/json
Content-Length:156
Cache-Control:max-age=3600
{ "id": 123, "name": "Alice", "email": "alice@example.com" }

1.1 مقارنة الإصدارات

الإصدارالسنةالتحسين الأساسيالسمات النموذجية
HTTP/0.91991يدعم GET فقطنص خالص، طلب فقط، بدون رؤوس استجابة
HTTP/1.01996إضافة POST/HEADاتصال TCP واحد لكل طلب
HTTP/1.11997اتصال دائمKeep-Alive، اتصال واحد لعدة طلبات
HTTP/22015تعدد الإرسالإطارات ثنائية، ضغط الرؤوس
HTTP/32022مبني على QUICنقل UDP، حل حظر رأس الخط

💡 لماذا نحتاج HTTP/2؟

HTTP/1.1 رغم دعمه للاتصال الدائم، إلا أن الطلبات يجب أن ترسل تسلسليًا (يجب أن تعود استجابة الطلب السابق قبل إرسال الطلب التالي). HTTP/2 حل هذه المشكلة من خلال تعدد الإرسال، مما يسمح بإرسال عدة طلبات في نفس الوقت.


2. هيكل طلب HTTP

2.1 سطر الطلب

http
GET /api/users/123 HTTP/1.1

يحتوي على ثلاثة أجزاء:

  • الطريقة: GET، POST، PUT، DELETE إلخ
  • URL: مسار المورد المطلوب
  • الإصدار: HTTP/1.1 أو HTTP/2

2.2 رؤوس الطلب

http
Host: api.example.com
User-Agent: Mozilla/5.0
Accept: application/json
Authorization: Bearer xxx
Content-Type: application/json
Content-Length: 45

رؤوس الطلب الشائعة:

الرأسالوصفمثال
Hostنطاق الخادمapi.example.com
User-Agentمعلومات العميلMozilla/5.0
Acceptنوع الاستجابة المقبولapplication/json
Authorizationمعلومات المصادقةBearer token
Content-Typeنوع جسم الطلبapplication/json

2.3 جسم الطلب

json
{
  "name": "张三",
  "email": "zhangsan@example.com"
}

فقط الطرق POST، PUT، PATCH لها جسم طلب.


3. هيكل استجابة HTTP

3.1 سطر الحالة

http
HTTP/1.1 200 OK

يحتوي على ثلاثة أجزاء:

  • الإصدار: HTTP/1.1
  • رمز الحالة: 200، 404، 500 إلخ
  • نص الحالة: OK، Not Found إلخ

3.2 رؤوس الاستجابة

http
Content-Type: application/json
Content-Length: 156
Cache-Control: max-age=3600
Set-Cookie: session=xxx; HttpOnly

رؤوس الاستجابة الشائعة:

الرأسالوصفمثال
Content-Typeنوع جسم الاستجابةapplication/json
Content-Lengthحجم جسم الاستجابة156
Cache-Controlاستراتيجية التخزين المؤقتmax-age=3600
Set-Cookieتعيين Cookiesession=xxx

3.3 جسم الاستجابة

json
{
  "code": 0,
  "data": {
    "id": 123,
    "name": "张三"
  }
}

4. طرق HTTP بالتفصيل

الطريقةالاستخدامجسم الطلباللامتغيريةالأمان
GETالحصول على موردلا يوجدنعمنعم
POSTإنشاء مورديوجدلالا
PUTتحديث كامليوجدنعملا
PATCHتحديث جزئييوجدلالا
DELETEحذف موردلا يوجدنعملا
HEADالحصول على الرؤوسلا يوجدنعمنعم
OPTIONSاستعلام الطرق المدعومةلا يوجدنعمنعم

4.1 GET مقابل POST

الخاصيةGETPOST
موقع المعاملاتمعاملات استعلام URLجسم الطلب
التخزين المؤقتقابل للتخزين المؤقتغير قابل للتخزين المؤقت افتراضيًا
الإشارة المرجعيةيمكن إضافتها كإشارة مرجعيةلا يمكن
سجل التاريخيحفظ في سجل المتصفحلا يحفظ
طول البياناتمحدود (طول URL)غير محدود
الأمانالمعاملات مرئية في URLالمعاملات في جسم الطلب

💡 متى نستخدم GET/POST؟

  • GET: استعلام، الحصول على البيانات
  • POST: إنشاء، تقديم البيانات
  • PUT: تحديث كامل (استبدال المورد بالكامل)
  • PATCH: تحديث جزئي (تعديل حقول محددة فقط)
  • DELETE: حذف مورد

5. رموز حالة HTTP

5.1 تصنيف رموز الحالة

التصنيفالوصفرموز الحالة النموذجية
2xxنجاح200 OK، 201 Created، 204 No Content
3xxإعادة توجيه301 دائم، 302 مؤقت، 304 غير معدل
4xxخطأ من العميل400 معاملات خاطئة، 401 غير مصرح، 404 غير موجود
5xxخطأ من الخادم500 خطأ داخلي، 503 غير متاح

5.2 رموز الحالة الشائعة

رمز الحالةالوصفسيناريو الاستخدام
200 OKالطلب ناجحGET، PUT طلب ناجح
201 Createdتم الإنشاء بنجاحPOST إنشاء مورد بنجاح
204 No Contentلا يوجد محتوىDELETE حذف بنجاح
301 Moved Permanentlyإعادة توجيه دائمتغيير URL دائم
302 Foundإعادة توجيه مؤقتتغيير URL مؤقت
304 Not Modifiedغير معدلالتخزين المؤقت صالح
400 Bad Requestمعاملات خاطئةتنسيق معاملات الطلب خاطئ
401 Unauthorizedغير مصرحيحتاج تسجيل دخول
403 Forbiddenلا صلاحيةمسجل دخول لكن صلاحية غير كافية
404 Not Foundغير موجودالمورد غير موجود
500 Internal Server Errorخطأ داخلياستثناء في الخادم
503 Service Unavailableغير متاحالخادم في صيانة أو محمّل زيادة

6. HTTPS: HTTP الآمن

6.1 HTTP مقابل HTTPS

الخاصيةHTTPHTTPS
البروتوكولTCPTCP + SSL/TLS
المنفذ80443
البياناتنقل نص واضحنقل مشفر
الشهادةلا حاجةتحتاج شهادة SSL
الأداءأسرع قليلاًأبطأ قليلاً (تكلفة المصافحة)
SEOلا تأثيرمحركات البحث تفضل الفهرسة

6.2 سير عمل HTTPS

  1. Client Hello: العميل يرسل مجموعات التشفير المدعومة
  2. Server Hello: الخادم يعيد الشهادة ومجموعة التشفير المختارة
  3. التحقق من الشهادة: العميل يتحقق من صلاحية شهادة الخادم
  4. تبادل المفاتيح: استخدام التشفير غير المتماثل لتبادل مفتاح الجلسة
  5. الاتصال المشفر: استخدام مفتاح الجلسة للاتصال المشفر المتماثل

💡 مزايا HTTPS

  • منع التنصت: البيانات مشفرة، لا يمكن للطرف الثالث قراءتها
  • منع التلاعب: التحقق من سلامة البيانات
  • منع انتحال الهوية: شهادة SSL تتحقق من هوية الخادم

7. آلية التخزين المؤقت في HTTP

7.1 رؤوس التخزين المؤقت

الرأسالوصفمثال
Cache-Controlاستراتيجية التخزين المؤقتmax-age=3600
ETagرقم إصدار المورد"33a64df551425fcc"
Last-Modifiedوقت آخر تعديلWed, 21 Oct 2015 07:28:00 GMT

7.2 استراتيجيات التخزين المؤقت

التخزين المؤقت القوي:

http
Cache-Control: max-age=3600

خلال 3600 ثانية، يستخدم المتصفح التخزين المؤقت مباشرة، دون إرسال طلب.

التخزين المؤقت التفاوضي:

http
ETag: "33a64df551425fcc"

المتصفح يرسل If-None-Match، الخادم يعيد 304 (غير معدل) أو 200 (معدل).


8. الأسئلة الشائعة

8.1 الفرق الجوهري بين GET و POST

الاعتقاد الخاطئ: الفرق بين GET و POST هو فقط موقع المعاملات.

الحقيقة:

  • GET لامتغير، الطلبات المتعددة تعطي نفس النتيجة
  • POST غير لامتغير، الطلبات المتعددة قد تنشئ موارد متعددة
  • GET قابل للتخزين المؤقت، POST غير قابل للتخزين المؤقت افتراضيًا
  • GET يمكن حفظه كإشارة مرجعية، POST لا يمكن

8.2 حظر رأس الخط في HTTP/1.1

المشكلة: HTTP/1.1 رغم دعمه للاتصال الدائم، إلا أن الطلبات يجب أن ترسل تسلسليًا. إذا كانت استجابة الطلب السابق بطيئة، تنتظر الطلبات اللاحقة جميعها.

الحلول:

  • HTTP/2 تعدد الإرسال
  • تجزئة النطاق (نطاقات متعددة لإنشاء اتصالات متعددة)
  • تجمع الاتصالات (تحديد عدد التزامن)

8.3 مزايا HTTP/2

الخاصيةHTTP/1.1HTTP/2
تنسيق النقلنصيإطارات ثنائية
تعدد الإرسالغير مدعوممدعوم
ضغط الرؤوسلا يوجدخوارزمية HPACK
دفع الخادمغير مدعوممدعوم

جدول المصطلحات

المصطلحالإنجليزيةالشرح
HTTPHyperText Transfer Protocolبروتوكول نقل النص الفائق
HTTPSHTTP SecureHTTP + SSL/TLS
TCPTransmission Control Protocolبروتوكول التحكم في النقل
SSL/TLSSecure Sockets Layerطبقة المقابس الآمنة
اللامتغيريةIdempotentالطلبات المتعددة تعطي نفس النتيجة
الاتصال الدائمKeep-Aliveاتصال TCP واحد لإرسال عدة طلبات
تعدد الإرسالMultiplexingإرسال عدة طلبات في نفس الوقت
حظر رأس الخطHead-of-Line Blockingالطلب الأمامي يحظر الطلبات الخلفية