ما يجب أن يعرفه كل مبرمج عن الـ Http

img

ما يجب أن يعرفه كل مبرمج عن الـ Http

ما يجب أن يعرفه كل مبرمج عن الـ Http

 

 

كثيرا ما تصادف Http  فى بداية روابط المواقع على هيئة http://www.sitename.com   فما هى الـ http  بالضبط وماذا يحدث فى المتصفح دون أن تدرى لكن أولا تعالوا لنعرف كيف يعمل الانترنت .

 

ما هو الإنترنت ؟

(مقدمة يمكنك تخطيها ان اردت )

 

تعالى لنتخيل اننا عدنا بالزمن لما قبل الانترنت ونقوم بعمل  سيناريو افتراضى عن كيفية نشأته كما  لو كنت انت من أنشأ الانترنت

تخيل أن لديك جهاز كمبيوتر وصديقك حمودى لديه جهاز كمبيوتر تتبادلون الملفات باستمرار بين جهازك وجهاز صديقك عن طريق الـ usb flash  وفى أحد الايام جائكم اقتراح بربط جهازك بجهازه عن طريق سلك يمر فى الشارع بينك وبين صديقك حمودى  وبالتالى تبادل البيانات سيكون  اسهل ويكون بشكل مباشر  بين جهازك وبين جهاز صديقك حمودى عن طريق السلك بكل سهولة  .. انتقل احد الشباب واسمه سيد  الى منطقتكم حديثا  وسألك ما هذا السلك فقمت بإخباره انه سلك يربط جهازك بجهاز صديقك حمودى لتتبادلو البيانات فى اى وقت  .

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

انتشرت الفكرة فى منطقتك واهتم الجميع وصرتم جميعا متصلين ببعضكم البعض عن طريق الاسلاك التى تتجمع كلها  فى مكان ما .

قامت منطقة اخرى بتطبيق نفس فكرتكم ووصلوا اجهزتهم ببعضها عن طريق الاسلاك ، ولأن الامر رائع فانتشر بسرعة وارتبطت المدن ببعضها  البعض لكن حدث نوع من الفوضى فكل شخص يتبادل البيانات مع الاخرين بشكل عشوائى ويتوه البعض فى ايجاد البعض الاخر على الشبكة وبعد تفكير وصلتم الى حل رائع سوف تقوموا بتخصيص جهاز كمبيوتر واحد فقط  لكم جميعا  يعمل كمركز رئيسى توضع عليه جميع البيانات بشرط ان يكون متاح 24 ساعة يستطيع اى شخص منكم الوصول اليه فى اى وقت وبالتالى يجده متاحا ويستطيع رفع البيانات عليه ليخبر صديقا اخر يستقبلها من هذا الجهاز الذى اتفقتم عليه وتعهد صديقكم ” فاروق ” ان يتررك جهازه 24 ساعة يعمل ويكون جهازه هو الجهاز المركزى ..

tr

 

بعد اسبوع من التجربة اشتكى الجميع ان جهاز فاروق المفترض انه الجهاز المركزى يتوقف فى الكثير من الاوقات واتضح فيما بعد ان ام فاروق كلما دخلت غرفة فاروق وهو نائم فصلت الفيشة  الخاصة بالجهاز .

تعهد عاطف بأن يجعل جهازه يعمل 24 ساعة واستقر الجميع على ان يقوم عاطف بذلك لكن بعد اسبوع  من التجربة ومع ان عاطف ترك جهازه مفتوح 24 ساعة الا انهم وجدو ان الاتصال بطىء جدا وفيما بعد تبين ان العدد الكبير على الجهاز الخاص بعاطف هو ما يجعل الاتصال بطيئا وبذلك جلسوا يفكرون ماذا يمكن أن نفعل .. وجلبو صديقهم حمودى وهو مهندس كمبيوتر وخبير فى هذه الاجهزة فقرر بناء شىء مختلف أقوى من أيكون جهاز عادى ويتحمل أى عدد مهما كان وأطلق عليه اسم السيرفر  وهو جهاز أقوى بمواصفات افضل  ويتحمل الضغط  ويعمل 24 ساعة .

serv

 

وبالتاكيد اذا قامت  أم حمودى بفصل فيشة السيرفر فسيواجهون جميعا رسالة Server Not Found ? الم تقابلك هذه الرسالة من قبل ؟

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

 

مع تطور الانترنت الان هناك ملايين السيرفراات الموجودة على الانترنت والكثير من المواقع بدأت بموقع واحد سنة 1991 اول موقع على الانترنت الى اكثر من مليار موقع فى سنة 2014   .. يوجد مواقع لها سيرفرات خاصة بها كفيس بوك  فقط ويوجد مواقع مشتركة مع مواقع اخرى على سيرفر واحد كموقع هنديوير  .

 

 

الـ Http

عندما تقوم بطلب موقع معين من المتصفح وليكن www.youtube.com فان المتصفح يقوم بارسال طلب الى السيرفر (request )  يطلب الصفحة التى تريدها ثم يستجيب السيرفر و  يرسل الرد الى المستخدم (response)

requestres

وفى المتصفح قد يظهر امامك ان كل ما تم هو أنك قمت بكتابة www.youtube.com لكن هناك ما هو أكثر من ذلك يتم فى الخلفية فى المتصفح حيث يتم ارسال httprequest  ورابط الموقع مجرد جزء فقط فى العملية .. ويتم الرد من قبل السيرفر بمحتوى الموقع على هيئة html يقوم المتصفح بعرضه كما تراه عند فتح الموقع كن هناك اشياء فى الـ response استقبلها المتصفح وعالجها فى الخلفية  .

 

والان حان الوقت للتعرف على الـ http request  و الـ http response  و الشكل التالى يوضح تكوين كل من http request  و الـ http response

httprequestresponse

 

 

سنبدأ اولا بالـ Http Request

 

الـ Http Request  

بداية  يسمى مرسل الطلب بالعميل (client) ويتم ارسال الطلب الى الـسيرفر وكما يتضح من الصورة السابقة يتكون الـ httprequest الذى يتم ارساله الى السيرفر من requestline  وواحد أو اكثر من الـ headers  ثم الـ body  .

أ – RequestLine  

وهو عباره عن سطر الـ Requst ويحتوى على ثلاثة اشياء  وهى بالترتيب كالتالى :

1- Request Method 

وهو  عباره عن الميثود التى سيتم استخدامها فى الطلب والتى قد تكون POST أو GET وهما المشهورين أو ميثودث اخرى كـ DELETE  او PUT الخ ..

2- URI  

 

ويعتبر الـ URL أحد أنواع الـ URI ونقصد هنا المصدر مثلا لديك موقع باسمك اسمه www.hossam.com  وتريد الوصول لملف اسمه mycv.html موجود على موقعك وضعت  فيعتبر الـ /mycv.html هو الـ Resource او المصدر او الرابط .

 

3- Http Version  

وهو اصدار الـ HTTP وهو أما أن يكون 1.0 او 1.1  حيث ان الاصدار 1.1 هو عباره عن تحسين للاصدار 1.0 .

 

حيث يكون الريكوست لاين كالتالى :

ميثود مصدر اصدار

Method Resourse Version

مثال على الـ RequestLine

1
GET /mycv.html HTTP/1.1

وفى هذا المثال تم استخدام الميثود GET  والـ URI هو /mycv.html والـ Version هو HTTP/1.1

 

مثال اخر على RequestLine

1
POST /mycv.html HTTP/1.1

وفى هذا المثال تم استخدام الـميثود POST  .

 

ولاحظ أنه فى الـ RequestLine يتم الفصل بين مكوناته الثلاثة بمسافة .

 

ب- RequestHeaders  

يمكن أن يحتوى الـ Request على واحد أو اكثر من الـ Headers  والـ Header الخاص بالـ Request هو عبارة عن بيانات اضافية يمكن ارسالها مع الريكوست لكن تكون مختصرة وعلى هيئة أزواج من الـ Key  values  منها مثلا الـ HOST فلو لاحظت سابقا لم نقم بارسال الموقع بعد فى الرابط ولذلك سوف نضعه فى الـ header كمعلومات اضافية Host:www.hossam.com

كالتالى :

1
Host: www.hossam.com

 

ومن الاشياء التى يمكن ان يحتوى عليها الـ Header ايضا هى الـ Content-Type  وهى معلومات عن نوع المحتوى وكذلك الـ Charset  و Content-Length وبعض الـ الخواص الاخرى .

وتكون الصيغة العامة للهيدر كالتالى :

اسم الهيدر : القيمة الخاصة بالهيدر

headername: headervalue

مثال اخر على الـ header

1
Content-Length: 102000

 

ومن الـ Headers المشهورة هو هيدر الـ Accept  وهو يأخذ القيمة كـ MIME Type  وهو عباره عن header  يحدد للسيرفر الصيغة المقبولة من ملف معين على سبيل المثال اذا كان هناك صورة على السيرفر يمكن للسيرفر ان يمدك بها كـ PNG او GIF أو JPEG  فانت تقوم باخباره مسبقا أنك ستقبل JPEG وبذلك يرد السيرفر عليك بصورة من النوع الذى اخترته .

 

من الـ Headers  المشهورة ايضا هو الـ Content-Type وهذا الهيدر يأخذ القيمة كـ MIME Type  ويستخدم كثيرا فى حالة الـريكوست بطريقة الـ POST عند ارسال بيانات ضمن الـ Body الخاص بالـ Request  فانت تحدد فى الـ header نوع هذه البيانات حتى يفهم السيرفر نوع البيانات التى على وشك اني ستقبلها من الـ Request  الخاص بك .

مثال

1
Content-Type: image/jpeg

 

والـ MIMEType  هى عباره عن تنسيق معين او توصيف لنوع الميديا التى سيتم نقلها هنا تجد قائمة كاملة بكل الـ MIME Type

جـ- Request Body  (اختيارى )

حيث يمكن ارسال الـ Request بدون Body أو يمكن ارفاق Body كارفاق بيانات مع الـ Request وبالعودة الى سلسلة الويب سيرفس فى الاندرويد كنا نرسل البيانات بطريقة الـ POST وفى هذه الحالة يتم ادراج البارامترز فى الـ Body  وليس فقط هذا النوع من البيانات التى جربناها فى الويب سيرفس يستطيع نقلها عبر الـ body بل يمكن ايضا ارسال الملفات على هيئة بايتس أو ما يعرف بـ Multipart Data او البيانات متعددة الاجزاء ففى حالة رفع ملف مثلا من خلال الـ http request يتم رفع الملف على هيئة اجزاء من البايتس المتتابعة .

 

مثال على Http Request  كامل  يحتوى على body

1
2
3
4
5
POST /newpost.php HTTP/1.1
Host: www.website.com
Accept: text/plain
posttitle=something&postwriter=ali..

 

وكما يظهر من المثال ان هناك فاصل على هيئة سطر فارغ بين الـ Message Header والـ MessageBody حيث يعتبر الـ RequestLine  و الـ RequestHeaders هما الـ Header الخاص بالـ HttpMessage  .

 

 

الـ Http Response  

بعد استقبال الطلب من العميل يقوم السيرفر بالرد بارسال الـ Response ويتكون الـ Response من ثلاثة اشياء ايضا  الـ status line والـ Headers والـ Body

أ- Response Status Line 

وهو عباره عن سطر الحالة ويتكون من ثلاثة اجزاء

اصدار الـ HTTP ثم الـ كود الحالة ثم عبارة الحالة .

 

1
HTTP/1.1 200 OK

والكود 200 هو كود الاتصال بنجاح والعباره OK تذكر معه للتأكيد على نجاح العملية .

مثال اخر

1
HTTP/1.1 400 Bad Request

وهو يأتى عندما يكون هناك خطأ فى الريكوست لاين القادم من العميل مثال ان يكتب العميل الفيرجن الخاص بالـ http بهذا الشكر httppppp/1.1

 

مثال اخر

1
HTTP/1.1 404 Not Found

ويمكنك عمل بحث بسيط عن الانترنت ومعرفة كل اكواد الـ response ودلالة كل كود .

 

 

ب- ResponseHeaders

وهو عباره عن مجموعة من الـ headers تشبه كثير الـ headers الخاصة بالـ request مثلا يمكنك ان تجد Content-Lenth يحدد طول المحتوى وقد تجد Content-Type والذى يحتوى على نوع البيانات القادمة فى الـ body الخاص بالـ response  ويساعد المتصفح او المستقبل للـ response ان يعالج الناتج معالجة صحيحة .

 

ج- ResponseBody  

وهو يحتوى على ناتج الطلب او ما يرسله السيرفر نتيجة للطلب فاذا طلبت صورة على السيرفر فان السيرفر يرسلها لك على هيئة بايتس فى الـ body و اذا طلبت صفحة ويب فانه يرسل كود الـ html الخاص بها فى الbody والذى يعالجها المتصفح ويعرض لك الصفحة .

 

 

مثال كامل على Http Response لاحد السيرفرات فى حالة الـعدم ايجاد الصفحة او الريسورس المطلوب .

1
2
3
4
5
6
7
8
9
10
11
12
13
14
HTTP/1.1 404 Not Found
Date: Sun, 18 Oct 2009 10:36:20 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 204
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC “-//IETF//DTD HTML 2.0//EN”>
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /t.html was not found on this server.</p>
</body></html>

ولاحظ ان هناك سطر فارغ ايضا يفصل بين الـ Response Message Header وبين الـ Response Message Body  .

 

اتمنى الان أن تكون أخذت نظرة شاملة على الـ Http وماذا يحدث عند تبادل البيانات بين العميل (انت) والسيرفر .

الكاتب mr-mooka

mr-mooka

مواضيع متعلقة

اترك رداً