ساختار درخواست وب

هر توسعه دهنده خوبی می داند زمانی که کاربر آدرس یک صفحه وب را در مرورگر خود وارد می کند و دکمه اینتر را می زند چه اتفاقی می افتد. در حقیقت این یک سوال متداول در مصاحبه هاست. در این مقاله به این مسئله خواهیم پرداخت که در طی زمان پردازش یک درخواست وب چه اتفاقی می افتد.

واژه شناسی :

اولین چیزی که شما برای درک حقیقت پشت پرده درخواست های وب باید بدانید تعاریف زیر هستند :

  • وب سرور : نرم افزاری است که بر روی سرور قرار دارد و مسئولیت پردازش و رسیدگی به درخواست های ارسال شده را بر عهده دارد.
  • دی ان اس (DNS) : کوتاه شده سیستم نام دامنه هست (Domain Name System) که به سادگی می توان آن را یک دفتر تلفن دانست که برای هر آدرس آی پی (IP) یک نام اختصاص می دهد.
  • کد پاسخ : اعدادی هستند که نحوه و نوع پاسخ به درخواست HTTP را مشخص می کنند. (معروف ترین آن ها شامل 200 برای "تایید" و 404 برای "وجود ندارد" و 301 برای "تغییر همیشگی آدرس" و 500 برای "خطای داخلی سرور" می باشد.)

قدم اول : جستجوی نام

در واقعیت تمامی آدرس های وب تنها یک رشته از اعداد هستند که به آن ها IP می گویند که مثلا شبیه عبارت 216.58.198.174 هستند. در حقیقت اگر شما این آدرس را در مرورگر خود وارد کنید مشاهده می کنید که سایت گوگل نمایش داده می شود. عبارت "google.com" تنها یک نام است که به شما کمک می کند این آدرس را راحت تر به خاطر بسپارید و هر بار مجبور نباشید آن عدد کذایی را تایپ کنید !

پس هر بار که شما یک نام دامنه مانند google.com را داخل مرورگر خود تایپ می کنید ، مرورگر شما از DNS درخواست می کند که آدرس IP متناظر با آن را مشخص کند.

از نقطه نظر دیگر می توان به لیست شماره تلفن ها در گوشی همراه خود نگاه کنید که مثلا به جای حفظ کردن و وارد کردن شماره آقای محمدی تنها کافی است که اسم آن را در لیست افراد جستجو کنید و تلفن آن نمایش داده می شود. در این مثال آقای محمدی همان نام دامنه است و شماره تلفن اون همان آدرس IP خواهد بود.

قدم دوم : خود درخواست

حال که مرورگر در قدم قبلی توانست آدرس دقیق سرور را پیدا کند نوبت به فراهم کردن درخواست می رسد. این درخواست وب حاوی یک هدر خواهد بود و همچنین در برخی موارد محتوا نیز خواهد داشت ( مثلا اطلاعات یک فرم زمانی که کاربر فرمی را از طریق وب ارسال می کند).

هدر درخواست شامل موارد زیر می باشد :

  • روش درخواست : عموما یا از نوع GET  یا POST می باشد. معمولا نوع درخواست زمانی که جهت دریافت اطلاعات باشد ( مثلا درخواست مشاهده یک صفحه وب ) از نوع GET تنظیم می شود و هنگام ارسال اطلاعات مثلا ارسال یک فرم یا ورود اطلاعات کاربری جهت لاگین شدن یا نوشتن یک مطلب روی صفحه وب از نوع POST تنظیم می گردد.
  • آدرس درخواست (URL) : یک آدرس کامل است که به سرور می گوید کدام صفحه مورد نظر کاربر می باشد.
  • پروتکل : این قسمت شامل ورژن HTTP می باشد که معمولا به صورت 1.1 می باشد.

درخواست ترکیب شده که از سوی مرورگر شما برای سرور ارسال خواهد شد شکلی شبیه زیر خواهد داشت :

GET /about.html HTTP/1.1

سایر اطلاعات می تواند در زیر آن اضافه شود.

فرمت آن ها به صورت جفتی کلید : محتوا خواهد بود. یعنی هر قسمت اطلاعات یک کلید شناسایی دارد و یک مقدار.

مثال هایی از آن می تواند شامل مواردی نظیر : اطلاعاتی درباره مامور کاربر (اطلاعاتی درباره مرورگر درخواست کننده ) ، کوکی ها (Cookies) ، نوع محتوا ، هاست (نام دامنه ) وغیره باشد. یک درخواست کامل تر می تواند مانند مثال زیر باشد :

GET /culture/anatomy-web-request HTTP/1.1[CRLF]
Host: viacreative.co.uk[CRLF]
Connection: close[CRLF]
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36
Accept-Encoding: gzip[CRLF]
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7[CRLF]
Cache-Control: no-cache[CRLF]
Accept-Language: de,en;q=0.7,en-us;q=0.3[CRLF]

قدم سوم : پاسخ

بعد از اینکه وب سرور درخواست وب را دریافت کرد که در قدم قبلی ارسال کرده بودیم ، یک پاسخ ایجاد خواهد کرد. مانند درخواست این پاسخ نیز شامل فیلدها و بخش های مختلفی خواهد بود که برای نمونه مواردی را ذکر می کنیم :

  • کد پاسخ HTTP : در قسمت اول مقاله و بخش واژه شناسی اشاره شده است. اگر درخواست موفقیت آمیز باشد کد 200 به منزله قبول درخواست ارسال خواهد شد.
  • زمانی که پاسخ ایجاد شده است.
  • محتوای HTML صفحه درخواست شده.

برای مثال یک پاسخ عمومی HTTP مانند مورد زیر می باشد :

HTTP/1.x 200 OK
Transfer-Encoding: chunked
Date: Mon, 19 Dec 2016 15:32:21 GMT
Server: nginx/1.11.5
Connection: close
Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip
Vary: Accept-Encoding, Cookie, User-Agent
<!doctype html>
<html lang="en">
<!-- Rest of the HTML -->

فیلد مربوط به نوع محتوا (Content-Type) به مرورگر جواب می دهد که انتظار دریافت که نوع محتوایی را داشته باشد که در این مثال از جنس ساده HTML می باشد و حالا مرورگر می داند که باید یک درخواست از نوع HTML را آماده نمایش کند. نوع محتوا می تواند یک تصویر یا فیلم یا JSON یا غیره باشد. این فیلد قصد دارد به مرورگر بگوید که آمادگی دریافت چه چیزی را داشته باشد.

اگر محتوای HTML ارسال شده از سوی سرور در داخل خود حاوی عکس و فیلم و فونت و فایل های CSS/JavaScript باشد ( که معمولا به همین صورت است ) مرورگر این موارد را نیز به سرور درخواست می دهد که این درخواست های توکار (Embedded) مجددا از سوی سرور پردازش شده و نتیجه به مرورگر جواب داده می شود.

اگر از مرورگر فایرفاکس استفاده می کنید ( که کار خوبی می کنید (: ) و روی یک صفحه وب راست کلیک کرده و گزینه Inspect element را انتخاب کنید و در قسمت باز شده در انتهای صفحه روی تب Network کلیک کنید می توانید لیست درخواست های مورد نیاز برای ایجاد آن صفحه را مشاهده کنید :

نتیجه گیری :

به همین سادگی !

البته همیشه به همین سادگی ها هم نیست مخصوصا زمانی که شما یک فرم را به صورت اینترنتی پر می کنید یا اینکه قصد آپلود یک فایل را بر روی سرور داشته باشید که البته شاید وقتی دیگر به این طور موارد نیز بپردازیم.

 

سرتون سلامت ! سایتون سنگین (:

 

لینک منبع