كيف يعمل بروتوكول HTTP (الجزء الثالث) "ارسال ترويسة الطلب".

http protocol
بروتوكول http

تحدثنا في الجزئيين الأول والثاني عن ماهية بروتوكول http وعن كيفية عملة في الخلفية وما هي الخطوات التي يمر بها طلبك لصفحة ما من موقعك المفضل, والآن نكمل حديثنا عن تلك الخطوات.

3. الخطوة الثالثة: ارسال ترويسة طلب http إلى السيرفر.

وأخيرا بعد فتح الاتصال مع الخادم يمكننا الآن التحدث إليه. فيقوم المتصفح بتكوين الطلب على شكل ترويسة http وإرساله إلى الخادم عبر اتصال TLS/TCP.

ومن الجميل أن بروتوكول http هو بروتوكول نصي (أي يقوم بإرسال الطلبات على هيئة نصوص), لذلك فمن السهل جدا أن تقوم بقراءتها. ويبدو طلب http بهذا الشكل (من الضروري إلحاق علامة نهاية السطر \r\n في نهاية كل حقل من حقول ترويسة الطلب):


GET /How-does-HTTP-work HTTP/1.1\r\n
User-Agent: curl/7.24.0 (amd64-portbld-freebsd8.4) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.3\r\n

Accept: */*\r\n

r\n\

والسطر الأول يبين نوع الطلب ويكون على الشكل (فعل الملف-المطلوب اصدار http \r\n):


  • الفعل: وهو يوضح للسيرفر ماذا يفعل, وهو في هذه الحالة GET وتعني احضر, ويوجد أفعال أخري غير هذا ويعتبر POST أهمها فهو يستخدم لإرسال البيانات إلى السيرفر.
  • الملف-المطلوب: وهو جزء العنوان URL الذي يخبر السيرفر أي ملف يحضر (وفي هذه الحالة "/" تعنى الصفحة الرئيسية).
  • اصدار http: ويحدد اصدار http وهو في هذه الحالة HTTP/1.1.

أما السطور الأخرى فتحتوي على حقول تحمل معلومات إضافية إلى السيرفر وتكون على الشكل (الاسم: القيمة \r\n).


  • الاسم: ويحدد معنى ووظيفة الحقل, ويمكن لتطبيقات الويب تعريف حقول خاصة بها غير تلك الموجودة بالفعل وتكون عادة مسبوقة ب "X-".
  • القيمة: وتحتوي القيمة على معلومات الحقل وتقدمها لترويسة http, وهي عبارة عن بيانات نصية. لا يحدد البروتوكول حد أقصى لطول هذه البيانات ولكن قد يفعل السيرفر, فمثلا سيرفر الأباتشي يحددها ب 8192 بايت كحد أقصى لطول هذه البيانات.

وللنظر الآن إلى بقية الحقول الموجودة في ترويسة الطلب هذه:


  • حقل "user agent" يخبر السيرفر نوع البرنامج أو المتصفح الذي أرسل الطلب.وهنا "curl 7.24.0" تخبره أنني استخدمت برنامج curl وكذلك اصداره هو 7.24.0 وهو ليس متصفحا حقيقيا بل برنامج قادر على تكوين ترويسة http وارسالها وكذلك اظهارها مع ترويسة الرد التي سنعرفها في الجزء القادم, ويمكنك الحصول عليه من هنا.
  • حقل "Host" يخبر السيرفر عن اسم النطاق أو عنوان IP للموقع الذي اطلبه, على الرغم أننا لا نحتاجه في الاتصال (فهو منشئ بالفعل) إلا أنه مفيد للسيرفر في بعض الأحيان عند معالجة الطلب.
  • حقل "Accept" والذي يخبر السيرفر أي نوع من البيانات يمكن لمتصفحي فهمها ومعالجتها وهنا "*/*" تعنى كل أنواع البيانات (والتي هي كذبة في الحقيقة ف curl لا يظهر سوى البيانات النصية).والقيمة الواقعية يمكن أن تكون مثلا "text/html" والتي تعنى أن المتصفح قادر على فهم ومعالجة HTML.

وأخيرا السطر الأخير الذي يحتوي على علامة نهاية "\r\n" السطر فقط يعنى نهاية الترويسة.

وبهذا نكون قد تعرفنا بالتفصيل على الخطوة الثالثة والأهم من خطوات عمل بروتوكول http وعن تركيبة الترويسة التي يرسلها المتصفح (أو أي برنامج) إلى السيرفر.

انتظر الخطوة الرابعة وهي تلقى الرد من السيرفر وكيف يكون شكل ترويسة الرد في الجزء القادم.


إلى اللقاء. 


تعليقات

المشاركات الشائعة من هذه المدونة

30 شيء تمنيت لو عرفتها عندما بدأت في البرمجة(الجزء الأول).

ما هي مبادئ SOLID؟ ولما يجب أن يعرفها كل مطور؟

كيف تصبح مطور ويب وتحصل على وظيفة في أسرع وقت؟ (الجزء الثاني)