الأحد، 7 نوفمبر 2010

شرح برتوكول HTTP


 
ما هو برتوكول HTTP ؟:


HTTP  هو أختصار لـ"Hypertext Transfer Protocol" ,  وهذا البرتوكول الذي تستخدمه عن تصفح للأنترنت كقرأتك لهذا الموضوع , هذا البرتوكول من أكثر البرتوكولات أستخدما عند التعامل من شبكة الأنترنت العالمية أو "World Wide Web" .


 ماذا سيفيدني تعلم برتوكول "HTTP" ؟ :
تعلم هذا البرتوكول سيساعدك على فهم كيفية عمل المواقع و كذلك الحصول على معلومات هامة من الموقع , كما سيسهل عليك برمجة برامج و سكريبت لتعامل مع المواقع المعتدمة على HTTP .





ماذا أحتاج لتطبيق أوامر "HTTP" ؟:
برتوكول "HTTP" يعتمد على أوامر تكتب بنص بصغية "ASCI" , أي أن الأمر سيكون مقروأ بالنسبة لك , لذا كل ما تحتاج له هو برنامج لأنشاء الأتصال و أرسال الأوامر وقد أعتمدت في شرحي للبرتوكول على الأداة "Netcat" قم بكتابة  الامر كالتالي لأنشاء أتصال مع سيرفر "HTTP" على المنفذ الأفتراضي 80 :
nc example.com 80 
ثم قم بكتابة الأمر كما سأوضح في الشرح (لكي تتعرف أكثر على الأداة Netcat أقرأ هذا الموضوع).


ما هو صيغة أوامر HTTP ؟ :


تقسم أوامر "HTTP" ألى طلبات "Request" التي تستخدم من قبل برنامج المتصفح لطلب الصفحات و الموارد من على السيرفر , و "response"  و هو الرد من قبل السيرفر .




شرح أوامر المتصفح "Request":

الصيغة الأساسية لطلبات المتصفح تكون كالتالي :


الأمر
معلومات التحكم
<خط فارغ يخبر السيرفر بأنتهاء الأمر>

و هذا الجدول يحتوي على أوامر HTTP مع الشرح كما سأتطرق لى كيفية أستعمالها بأستخدام برنامج netcat .


الأمر
الشرح
GET
طلب الصفحة أو الملف الموضوح في الرابط URL 
HEAD
طلب معلومات السيرفر أو ما يسمى “header”
POST
أرسال معلومات ألى السيرفر
PUT
يقوم هذا الأمر بأنشاء ملف بأسم مختار من المتصفح و أرسال البيانات أليه
DELETE
يقوم هذا الأمر بحذف الصفحة أو الملف المطلوب
OPTIONS
عرض الأوامر المسموح بها على السيرفر



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


أسم التعليمة
الشرح
Accept
نوع البيانات التي يستطيع المتصفح التعامل معها
Accept-Charset
نوع ترميز الحروف المقبول من المتصفح مثل “utf-8”
Accept-Encoding
ترميز البيانات المقبول من المتصفح
Accept-Language
اللغات التي يتعامل معها المتصفح القيمة الأفتراضية هي الأنجليزي
Authorization
معرف المتصفح
Content-Encoding
نوع الترميز المستخدم في الطلب
Content-Language
نوع اللغة المستخدمة في الطلب
Content-Length
طول البيانات المرسلة في الطلب
Content-Type
نوع البيانات المرسلة كمثال (html/text) أي أن نوع البيانات هو نصي لصفحة HTML
Date
التاريخ في جهازك
Forwarded
يستخدم هذا الحقل في حالة أستخدام بروكسي ويحتوي على العنوان الخاص بجهازك
From
يظهر البريد الألكتروني للمستخدم هذا الحقل لا يستخدم عادة
From
تستطيع أستخدام الحقل From أيضا للأستقبال المستند أذا تم تعديله في التاريخ المعين
Orig-URL
الموقع الذي تم تحويل المستخدم منه
Referer
هنالك شبه بينه و بين الأمر السابق و الفرق أنه يظهر الرابط الكامل
User-Agent
يظهر أصدارة المتصفح كما تحتوي على أصدارة نظام التشغيل
HOST
أسم الموقع تستخدم هذه التعليمة تستخدم هذه التعليمة لتسهيل أستضافة أكثر من موقع على سيرفر واحد


الأستجابة "response" من قبل السيرفر :

يكون رد السيرفر بالصيغة التالية :
(أصدارة برتوكول HTTP) (رقم الأستجابة) (شرح رقم الأستجابة)  
المعلومات الخاصة بالسيرفر
<سطر خالي يخبر المتصفح بأنتهاء التعليمات >
المعلومات المطلوبة من قبل المتصفح .

و أليك مثال عملي على رد السيرفر على طلب المتصفح .
HTTP/1.1 200 OK
Date: Sat, 15 Jan 2008 14:37:12 GMT
Server: Microsoft-IIS/2.0
Content-Type: text/HTML
Content-Length: 1245
Last-Modified: Fri, 14 Jan 2008 08:25:13 GMT
   
Information you requested 
و هذا جدول بأرقام الأستجابة (قم بأستبدال الرمز xx بالأرقام من 1 ألى 99):
الشرح
رقم الأستجابة
تدل على أن السيرفر أرسال رسالة معلومات فقط
1xx
تدل على نجاح الأمر
2xx
تحويل المستخدم ألى رابط أخر
3xx
خطأ من جانب المتصفح
4xx
خطأ من جانب السيرفر
5xx

و هذا هو شرح المعلومات التي ترسل مع الأستجابة أو "Headers":


الشرح أسم التعليمة
الترميز الستخدم في البيانات المرسلة Content-Encoding
اللغة المستخدمة في البيانات المرسلة Content-Language
طول البيانات المرسلة Content-Length
نوع البيانات المرسلة كمثال text في حالة كانت البيانات نصية Content-Type
التاريخ و الوقت الذي أرسلت فيه البيانات Date
هذا التاريخ الذي سيقوم فيه المتصفح بحذف الصفحة من ملف التخزين الخاص به Expires
هذه التعليمة تستخدم في حالة أستخدام بروكسي حيث تحتوي على عنوان جهازك Forwarded
تحتوي على الرابط الذي سيقوم السيرفر بتوجيه متصفح له Location
أصدارة السيرفر و نوع  النظام Server



الأمر "GET":
أنظر ألى المثال التالي :
GET /index.html HTTP/1.1
HOST:Example.com
<NEW LINE> 
شرح الأمر :
GET: هذا الأمر يعيني جلب على المصدر المعين
index.html/:أسم الصفحة المطلوب جلبها من الموقع 
HTTP/1.1: هذا هو أصدار البرتوكول  1.1
HOST:هذه التعليمة تستخدم للأخبار السيرفر عن الموقع المراد الأتصال به و تم أضافة هذه الخاصية للسماح للموقع بأستضافة أكثر من موقع واحد على نفس الأي بي (IP)  .
<NEW LINE>: يخبر السطر الجديد بأن المتصفح أنتهى من كتابة الأمر .

لتجربة أي من الأوامر قم بأستخدام الأداة "NETCAT" كما في المثال التالي:
nc example.com 80
بعد ذلك قم بكتابة الأمر "GET" كما في الصيغة السابقة في مترجم الأوامر و أضغط  <ENTER>  مرتين .

الأمر "POST":
 يستخدم الأمر "POST" لأرسال المعلومات لبرنامج على السيرفر كما يحدث في حالة تسجيل الدخول على موقع أو البحث في محرك البحث كما في المثال التالي حيث سأرسل بيانات ألى الصفحة login.asp :
POST /login.asp HTTP/1.1
HOST:www.example.com
User-agent:Mozilla/4.0
Content-Length:27
Content-type:application/octet-stream

username=abgoor&password=test

الفرق بين الأمر GET و POST هو وجود التعليمتن "Content-Length" التي تحدد طول البيانات المرسلة من قبل المتصفح و التعليمة "Content-type" التي تحدد نوع البيانات , بعد أنتهاء الأمر نفصل بينه وبين البيانات بخط فارغ 

الأمر "HEAD":

هذا الأمر يستخدم لعرض معلومات السيرفر تستطيع أستخدامه كالتالي بعد الأمر "nc www.example.com 80" :

HEAD / HTTP/1.1
Host:www.example.com

سيقوم الأمر بعرض معلومات السيرفر فقط بدون أي معلومات أخرى .


الأمر "PUT":

 يقوم هذا الأمر بأنشاء ملف على السيرفر و أستقبال المعلومات من قبل المتصفح و حفظها على السيرفر كما في المثال التالي :

PUT hack.txt HTTP/1.1
Host:Example.com
Content-Type:text
Content-Length:21
abgoor.blogspot.com
الأمر "DELETE":

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

DELETE /hack.txt HTTP/1.1
Host:example.com

الأمر "OPTIONS":

يقوم هذا الأمر بعرض الأوامر المسموح بها على برنامج السيرفر كما في التالي :
OPTIONS * HTTP/1.1
HOST:example.com

سيكون رد السيرفر كالتالي حيث سيعرض الأوامر التي تستطيع تطبيقها (بعض السيرفرات تعطل أمر OPTIONS):
HTTP/1.1 200 OK
Allow:GET,POST,OPTIONS
Content-Length:0

أذا أردت أن تكتشف أذا كان السيرفر يقدم الدعم للأمر معين كالأمر "POST" تستطيع كتابة الأمر كالتالي :

OPTIONS POST HTTP/1.1
Host:example.com
في حالة أن الأمر مدعوم من قبل السيرفر ستكون الأستجابة كالتالي  :
HTTP/1.1 200 OK
Allow:POST
Content-Length:0


الأمر "TRACE":

يعرض هذا الأمر عنوان البروكسي الذي يقوم بربط بينك و بين السيرفر المحتوي على الموقع تستطيع أستخدام الأمر كالتالي :

TRACE /index.html HTTP/1.1
HOST:example.com
في حالة تواجد بروكسي سيكون رد السيرفر كالتالي :
HTTP/1.1 200 OK
Content-Type:text/html
Content-Length:22
Via:proxy1.company.com

كتلاحظ التعليمة "Via" التي تحتوي على عنوان البروكسي المستخدم في ربطك بالموقع .


المصادر :
الملف الخاص ببرتوكول HTTP الأصدار 1.1

الملف الخاص ببرتوكول HTTP الأصدار 1.0


في نهاية هذا الموضوع البسيط , أسأل الله تعالى ان يكون وفقني ألى شرح برتوكول HTTP بشكل مبسط و سهل الفهم . 

هناك 9 تعليقات:

  1. الله يعطيك العافيه ياصاحبي ستمتعت بالقراءة
    بس بترفلك شي مصدر باللغة العربية مستفيض بالشرح اكتر

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

    ردحذف
  3. يسلم إيديك

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

    ردحذف
  5. ما المقصود بالhttp1.1 features

    ردحذف
  6. شكرا جزيلا
    في ميزان حسناتك

    ردحذف
  7. شكرا شرح جميل جدا
    وفيت و كفيت

    ردحذف