پرتال جامع دانشجویان کامپیوتر

1394/08/14 آشنائی با پروتكل HTTP ( بخش اول ) در اينترنت همانند ساير شبكه های كامپيوتری از پروتكل های متعدد و با اهداف مختلف استفاده می گردد. هر پروتكل از يك ساختار خاص برای ارسال و دريافت اطلاعات (بسته های اطلاعاتی ) استفاده نموده و ترافيك مختص به خود را در شبكه ايجاد می نمايد . HTTP ( برگرفته از Hyper Text Transfer Protocol ) ، يكی از متداولترين پروتكل های لايه application است كه مسئوليت ارتباط بين سرويس گيرندگان و سرويس دهندگان وب را برعهده دارد . در ادامه با پروتكل فوق بيشتر آشنا خواهيم شد. پروتكل HTTP چيست ؟ دنيای شبكه های كامپيوتری دارای عمری چند ساله است و بسياری از كاربران ، ضرورت استفاده از شبكه را همزمان با متداول شدن اينترنت در اوايل سال 1990 دريافتند . عموميت اينترنت، رشد و گسترش شبكه های كامپيوتر‌ی را به دنبال داشته است . اينترنت نيز با سرعتی باورنكردنی رشد و امروزه شاهد ايجاد ده ها ميليون وب سايت در طی يك سال در اين عرصه می باشيم . تمامی وب سايت های موجود بر روی‌ اينترنت از پروتكل HTTP استفاده می نمايند . با اين كه پروتكل HTTP با استفاده از پروتكل های ديگری نظير IP و TCP ماموريت خود را انجام می دهد ، ولی اين پروتكل HTTP است كه به عنوان زبان مشترك ارتباطی بين سرويس گيرنده و سرويس دهنده وب به رسميت شناخته شده و از‌ آن استفاده می گردد . در واقع مرورگر وب صدای خود را با استفاده از پروتكل HTTP به گوش سرويس دهنده وب رسانده و از وی درخواست يك صفحه وب را می نمايد. به منظور انجام يك تراكنش موفقيت آميز بين سرويس گيرندگان وب ( نظير IE ) و سرويس دهندگان وب ( نظير IIS ) ، به اطلاعات زيادی نياز خواهد بود . پس از handshake پروتكل TCP/IP ، مرورگر اطلاعات گسترده ای را ‌ برای سرويس دهنده وب ارسال می نمايد .


آشنائی با پروتكل HTTP ( بخش اول )
در اينترنت همانند ساير شبكه های كامپيوتری از پروتكل های متعدد و با اهداف مختلف استفاده می گردد. هر پروتكل از يك ساختار خاص برای ارسال و دريافت اطلاعات  (بسته های اطلاعاتی ) استفاده نموده و ترافيك مختص به خود را در شبكه ايجاد می نمايد .  HTTP  ( برگرفته از Hyper Text Transfer Protocol ) ، يكی از متداولترين پروتكل های لايه application است  كه مسئوليت ارتباط بين سرويس گيرندگان و سرويس دهندگان وب را برعهده دارد .
در ادامه با پروتكل فوق بيشتر آشنا خواهيم شد.

پروتكل HTTP چيست ؟
دنيای شبكه های كامپيوتری دارای عمری چند ساله است و بسياری از كاربران ، ضرورت استفاده از شبكه را همزمان با متداول شدن اينترنت در اوايل سال 1990 دريافتند . عموميت اينترنت، رشد و گسترش شبكه های كامپيوتر‌ی را به دنبال داشته است . اينترنت نيز با سرعتی باورنكردنی رشد و  امروزه شاهد ايجاد ده ها  ميليون وب سايت در طی يك سال در اين عرصه می باشيم .
تمامی وب سايت های موجود بر روی‌ اينترنت از پروتكل HTTP استفاده می نمايند . با اين كه پروتكل HTTP  با استفاده از پروتكل های ديگری نظير IP و TCP ماموريت خود را انجام می دهد ، ولی اين پروتكل HTTP است كه به عنوان زبان مشترك ارتباطی بين سرويس گيرنده و سرويس دهنده وب به رسميت شناخته شده و از‌ آن استفاده می گردد . در واقع مرورگر وب صدای خود را با استفاده از پروتكل HTTP به گوش سرويس دهنده وب رسانده و از وی درخواست يك صفحه وب را می نمايد.
به منظور انجام يك تراكنش موفقيت آميز بين سرويس گيرندگان وب ( نظير IE )  و سرويس دهندگان وب ( نظير IIS ) ، به اطلاعات زيادی نياز خواهد بود . پس از handshake پروتكل TCP/IP ، مرورگر اطلاعات گسترده ای را ‌ برای سرويس دهنده وب  ارسال می نمايد .
يك بسته اطلاعاتی نمونه در شكل زير نشان داده شده است :

آشنایی با HTTP

 

توضيحات  :

 
داده مربوط به پروتكل لايه application ( در اين مورد خاص پروتكل HTTP ) ، پس از هدر TCP/IP قرار می گيرد  . جدول زير برخی اطلاعات مبادله شده بين سرويس گيرنده و سرويس دهنده وب را نشان می دهد .

عملكرد    نوع اطلاعات
سرويس گيرنده وب يك درخواست GET را برای سرويس دهنده وب ارسال و از وی درخواست اطلاعاتی را با استفاده از  پروتكل HTTP 1.1 می نمايد.
پروتكل HTTP دارای نسخه شماره يك نيز می باشد كه امروزه عموما" از نسخه فوق استفاده نمی گردد و در مقابل از نسخه 1 . 1 استفاده می شود.    GET /HTTP/1.1
وب سايتی است كه سرويس گيرنده قصد ارتباط با آن را دارد .     Host:
 www.google.ca
به سرويس دهنده وب ، نوع  نرم افزار سرويس گيرنده ( در اين مورد خاص   Mozilla version 5.0 ) و  نوع سيستم عامل نصب شده بر روی كامپيوتر ( در اين مورد خاص Windows version NT 5.1 و يا همان ويندوز XP  ) اعلام می گردد.     User-agent:
 Mozilla/5.0 (Windows; U; Windows NT 5.1;
نوع character set استفاده شده به سرويس دهنده اعلام می گردد ( در اين مورد خاص از  en:us  و نسخه شماره  10 . 7 . 1  استفاده شده است ) .     en-US; rv: 1.7.10)
نام مرورگر استفاده شده توسط سرويس گيرنده به سرويس دهنده وب اعلام می گردد ( در اين مورد خاص از مرورگر FireFox استفاده شده است ) .     Gecko/20050716 Firefox/1.0.6
سرويس گيرنده به سرويس دهنده وب فرمت  اطلاعاتی را كه می تواند دريافت نمايد ، اعلام می نمايد ( در اين مورد خاص هم برای متن و هم برای   application  از فرمت xml استفاده می گردد ) .      Accept:
 text/xml, application/xml, application/xhtml+xml
سرويس گيرنده  به سرويس دهنده نوع فرمت متن دريافتی را اعلام می نمايد ( در اين مورد خاص html و يا plain text ) .
همچنين فرمت فايل های گرافيكی ( در اين مورد خاص png . و ساير فرمت های متداول ) نيز اعلام می گردد .      text/html; q=0.9, text/plain; q=0.8, image/png, */*;q=0.5
ليست character set كه سرويس گيرنده وب قادر به فهم آنان است،  اعلام می گردد ( در اين مورد خاص  ISO-8859 , و يا utf-8  ) .    Accept-Charset:
 ISO-8859-1, utf-8; q=0.7, *;q=0/7
به  سرويس دهنده وب مدت زمان نگهداری  session  اعلام می گردد ( در اين مورد خاص 300 ثانيه ) .
سرويس گيرندگان می توانند با صراحت پايان يك session را اعلام نمايند . در نسخه شماره 1 . 1  پروتكل HTTP ، ارتباط و يا اتصال برقرار شده فعال و يا open باقی خواهد ماند تا زمانی كه سرويس گيرنده خاتمه آن را اعلام  و يا مدت زمان حيات آن به اتمام رسيده باشد .
در نسخه شماره يك پروتكل HTTP ، پس از هر درخواست و اتمام تراكنش ، ارتباط ايجاد شده غيرفعال و يا close می گردد .     Keep-Alive:
 300 Connection: keep-alive
cookie  و مقدار مربوطه  به آن اعلام می گردد. كوكی يك متن اسكی فلت می باشد كه اطلاعات متفاوتی را در خود نگهداری می نمايد .
مدت زمان حيات يك كوكی می تواند موقت ( تا زمانی كه مرورگر فعال است ) و يا دائم ( ذخيره بر روی هارد ديسك كامپيوتر  و در يك محدوده زمانی تعريف شده ) باشد .     Cookie: PREF=ID=01a0822454acb293: LD=en:TM=1121638094�..

 User agent نوع مرورگر و سيستم عامل  سرويس گيرنده را مشخص می نمايد و اين موضوع می تواند  مواد اوليه لازم برای تدارك برخی حملات توسط مهاجمان را تامين نماید.

آشنائی با پروتكل HTTP ( بخش دوم )

در بخش اول با  جايگاه پروتكل HTTP به منظور مبادله اطلاعات بين سرويس گيرندگان و سرويس دهندگان وب اشاره و در ادامه با نوع و ماهيت اطلاعات ارسالی سرويس گيرندگان وب به منظور دريافت خدمات از سرويس دهندگان ، آشنا شديم .
در اين بخش با نوع و ماهيت اطلاعات ارسالی سرويس دهندگان وب به منظور پاسخ به درخواست سرويس گيرندگان آشنا خواهيم شد.  
مرورگر وب ، صدای خود را با استفاده از پروتكل HTTP به گوش سرويس دهنده وب می رساند و از وی درخواست يك صفحه وب را می نمايد.
سرويس دهنده وب علاوه بر اين كه با اين صدا آشنا است خود نيز برای پاسخ به مرورگر وب از مجموعه قوانين آن تبعيت می كند .
پروتكل HTTP  : يك معماری سرويس گيرنده و سرويس دهنده
سرويس گيرنده وب ، مقادير خاصی را با اهداف كاملا" مشخص شده برای سرويس دهنده وب ارسال می نمايد ( حصول اطمينان از وجود يك زبان مشترك برای گفتگو بين سرويس گيرنده و سرويس دهنده وب ) .  سرويس دهنده پس از بررسی اطلاعات ارسالی ، آنان را تفسير و متناسب با آن اطلاعاتی را برای سرويس گيرنده ارسال می نمايد . در معماری فوق يك نرم افزار در سمت سرويس گيرنده و به عنوان يك سرويس گيرنده وب ( نظير IE و يا  Mozilla Firefox   ) ايفای وظيفه می نمايد و در سمت سرويس دهنده يك نرم افزار به عنوان سرويس دهنده وب ( نظير : IIS و يا   Apache  ) وظايف تعريف شده خود را انجام می دهد.
سناريوی فوق مدل و يا معماری سرويس گيرنده - سرويس دهنده را در ذهن تداعی می نمايد ( معماری مبتنی بر درخواست و پاسخ ) .
پاسخ سرويس دهنده  
شكل زير يك بسته اطلاعاتی HTTP از مبداء يك سرويس دهنده به مقصد يك سرويس گيرنده  را نشان می دهد ( پاسخ سرويس دهنده ).  

آشنایی با HTTP

 

 توضيحات  :

 
جدول زير برخی اطلاعات ارسالی توسط سرويس دهنده را نشان می دهد .
عملكرد    نوع اطلاعات
به سرويس گيرنده اعلام می گردد كه :
•    سرويس دهنده وب از پروتكل  HTTP نسخه  1 .1  استفاده می نمايد.
•    فايل درخواستی وی توسط سرويس دهنده پيدا شده است .
200 ، يك كد وضعيت است كه وضعيت پاسخ به درخواست را مشخص می نمايد .     HTTP/1.1 200 OK   
مستند و يا فايل درخواستی سرويس گيرنده  توسط يك پراكسی cache نخواهد شد و هدف آن صرفا" برای كاربر متقاضی فايل است .     Cache-Control:
 private
فرمت ارسال فايل و يا مستند درخواستی به سرويس گيرنده وب اعلام می شود . در اين مورد خاص ، اطلاعات با فرمت  text/html ارسال می گردند .
سرويس گيرنده وب دارای دانش لازم به منظور بررسی و نمايش اطلاعات با فرمت اشاره شده می باشد .     Content-type:
 text/html
نوع سرويس دهنده و يا نرم افزار سرويس دهنده ( سرويس دهنده وب ) مشخص می گردد .
در اين مورد خاص ،  سرويس دهنده وب Google نمايش داده شده است .     Server:
 GWS/2.1
پروتكل HTTP نسخه شماره 1 .1  از ارسال اطلاعات به صورت chuncked حمايت می نمايد. در روش فوق ، بدنه يك پيام به منظور ارسال مجموعه ای از ماژول ها اصلاح می گردد . مسوليت مشخص كردن اندازه هر ماژول ارسالی بر عهده يكی از فيلدهای موجود در اين ساختار گذاشته می شود .
در صورت ارسال معمولی اطلاعات  توسط پروتكل HTTP ، از يك فيلد با نام "Content-Length" به منظور مشخص نمودن حجم داده ارسالی،استفاده می گردد .     Transfer-Encoding: chunked
 
زمان و تاريخ سرويس دهنده وب مشخص می گردد.     Date:
 Sat 30 Jul 2005 14:14:50 GMT
 
تگ های HTML ارسالی توسط سرويس دهنده وب به مقصد سرويس گيرنده وب می باشند كه توسط سرويس گيرندگان وب ( نظير IE  ) تفسير و نمايش داده می شوند .
با استفاده از گزينه view موجود در برنامه های مرورگر ، می توان تگ های HTML يك صفحه وب را مشاهده نمود .      
آشنائی با پروتكل HTTP ( بخش سوم )

در بخش اول و دوم با جايگاه پروتكل HTTP به منظور مبادله اطلاعات بين سرويس گيرندگان و سرويس دهندگان وب آشنا شديم . همچنين به اين موضوع اشاره گرديد كه   پروتكل فوق ، همانند اغلب پروتكل های لايه application ،  از معماری سرويس گيرنده - سرويس دهنده استفاده می نمايد .
در اين بخش به بررسی برخی پتانسل های ارائه شده توسط پروتكل HTTP خواهيم پرداخت .
HTTP يك پروتكل با قابليت های فراوان
HTTP ،‌ پروتكلی با قابليت های فراوان است كه عليرغم برخی محدوديت ها ، دارای سابقه درخشانی در  عرصه شبكه های كامپيوتری ( اينترانت ، اينترنت )  است .
 
HTTP پروتكلی ‌است كه امكان ارتباط بين سرويس گيرندگان و سرويس دهندگان وب را فراهم می نمايد .
يك سرويس دهنده وب در واقع  به عنوان يك سرويس دهنده HTTP  نيز ايفای وظيفه می نمايد .
زمانی كه مرورگر وب درخواست يك صفحه را از سرويس دهنده وب می نمايد، در واقع يك HTTP request  را ارسال و  سرويس دهنده وب نيز پاسخ آن را با يك HTTP response  خواهد داد  . يك پيام HTTP ، يك درخواست ( request ) و يا پاسخ ( response ) است كه از يك ساختار خاص تبعيت می نمايد .
HTTP  به يك پروتكل خاص لايه حمل وابستگی نداشته و عموما" از پروتكل TCP استفاده می نمايد (پورت شناخته شده 80 ) .
 كدهای وضعيت
همانند بسياری از پروتكل ها ، پروتكل  HTTP بر اساس يك مدل سرويس گيرنده - سرويس دهنده كار می كند .  كدهای وضعيت توسط تعداد زيادی از پروتكل های لايه application استفاده می گردد و می توان آنان را به پنج گروه عمده تقسيم نمود . جدول زير گروه های پنج گانه كدهای وضعيت  را در ارتباط با پروتكل HTTP  نشان می دهد .
عملكرد    كد
 اطلاع رسانی برای استفاده در آينده    1XX
 انجام موفقيت آميز تراكنش      2XX
 راهنمائی مجدد    3XX
 بروز خطاء سمت سرويس گيرنده     4XX
 بروز خطاء سمت سرويس دهنده     5XX
 هر يك از پنج گروه فوق، دارای كدهای وضعيت زير مجموعه ای می باشند كه بيانگر جزئيات عمليات است . جدول زير برخی از كدهای وضعيت هر يك از گروه های پنج گانه فوق را در ارتباط با پروتكل HTTP نشان می دهد .
عملكرد    كد وضعيت
 تراكنش با موفقيت انجام شده است    200
 دستور POST با موفقيت انجام شده است    201
 درخواست ارسالی دريافت گرديد.    202
 منبع درخواستی در مكان های مختلفی پيدا شده است     300
 منبع درخواستی به صورت دائم منتقل شده است     301
 منبع درخواستی به صورت موقت  منتقل شده است     302
 درخواست نامناسب از جانب سرويس گيرنده    400
 درخواست غيرمجاز     401
 منبع درخواستی پيدا نگرديد     404
 بروز خطاء بر روی سرويس دهنده     500
 متد استفاده شده ، پياده سازی نشده است     501
 درخواست های سرويس گيرندگان  و دستورات  
سرويس گيرندگان وب به منظور استفاده از خدمات سرويس دهندگان وب از مجموعه پتانسيل های ارائه شده ( دستورات )  توسط پروتكل HTTP استفاده می نمايند :
•    GET : سرويس گيرنده وب درخواست يك منبع موجود بر روی سرويس دهنده وب را می نمايد .
•    POST : سرويس گيرنده وب اطلاعاتی را برای سرويس دهنده وب ارسال می نمايد .
•    PUT : سرويس گيرنده وب يك مستند جايگزين را برای سرويس دهنده وب ارسال می نمايد .
•    HEAD : سرويس گيرنده وب اطلاعات  خاصی را در ارتباط با يك منبع موجود بر روی سرويس دهنده  درخواست می نمايد ( عدم نياز به خود منبع )  
•    DELETE : سرويس گيرنده وب درخواست حذف يك سند موجود بر روی سرويس دهنده را می نمايد .
•    TRACE : سرويس گيرندگان وب ، پراكسی مربوط به خود را تعريف می نمايند . از متد فوق اغلب در موارد اشكال زدائی استفاده می گردد .
•    OPTIONS : ساير پتانسيل های موجود به منظور كار بر روی يك سند توسط يك سرويس گيرنده وب درخواست می گردد .
•    CONNECT : سرويس گيرنده وب به عنوان يك پراكسی به يك سرويس دهنده HTTPS متصل می گردد .
در اغلب موارد صرفا" از متد‍ GET و در برخی موارد از HEAD استفاده می گردد ( در صورت اشكال زدائی يك برنامه وب از تمامی امكانات فوق استفاده می شود ) .

مراحل ايجاد يك تراكنش   
يك سرويس گيرنده وب قبل از اين كه بتواند با يك سرويس دهنده وب داده ئی را مبادله نمايد ، می بايست با آن ارتباط برقرار نمايد . بدين منظور از پروتكل TCP/IP استفاده می گردد . همانگونه كه اشاره گرديد سرويس گيرنده و سرويس دهنده وب برای ارسال يك درخواست و پاسخ به آن از پروتكل HTTP استفاده نموده و   ارتباط ايجاد شده بين خود را  صرفا" برای يك تراكنش نگهداری می نمايند ( HTTP يك پروتكل Stateless است ) .
فرآيند ايجاد يك تراكنش بين سرويس گيرنده و سرويس دهنده وب را می توان در چهار مرحله زير خلاصه نمود:
•     مرحله اول ، برقراری ارتباط : در ابتدا می بايست يك ارتباط و يا اتصال مبتنی بر پروتكل  TCP/IP  بين يك سرويس دهنده و يك سرويس گيرنده وب ايجاد گردد .  به منظور تشخيص نوع پروتكل استفاده شده  ، برنامه ها از يك عدد منحصر بفرد با نام  شماره پورت استفاده می نمايند .( پروتكل FTP از پورت 21 ، پروتكل Telnet از پورت 32 ، پروتكل SMTP از پورت 25 ، پروتكل HTTP از پورت 80 ) .
•    مرحله دوم : ‌ايحاد و يا صدور يك درخواست توسط سرويس گيرنده
•    مرحله سوم : ‌پاسخ سرويس دهنده به درخواست سرويس گيرنده
•    مرحله چهارم ،‌ خاتمه و يا توقف ارتباط : سرويس دهنده مسئوليت خاتمه ارتباط TCP با سرويس گيرنده وب را پس از پاسخ به درخواست سرويس گيرنده برعهده دارد . به منظور برخورد با مسائل غيرقابل پيش بينی ، هم سرويس گيرنده و هم سرويس دهنده می بايست قادر به مديريت يك ارتباط باشند . مثلا" پس از فعال نمودن دكمه stop در مرورگر ، می بايست به ارتباط ايجاد شده توسط سرويس گيرنده خاتمه داده شود .

پیشنهاد ویژه