سرفصل‌های آموزشی
وب چگونه کار می‌کند؟
کلاینت چگونه ریکوئست را ارسال می‌کند؟

کلاینت چگونه ریکوئست را ارسال می‌کند؟

هنگامی که بر روی یک لینک کلیک کرده و یا آدرس سایتی را در قسمت Address Bar مرورگر وارد می‌کنیم، اتفاقات بسیاری رخ می‌دهد بدین صورت که ابتدا مرورگر از سیستم‌عامل درخواست می‌کند تا یک پورت آزاد در اختیارش بگذارد سپس سیستم‌عامل از میان پورت‌های خالی خود یک پورت را به مرورگر می‌دهد و مرورگر هم با استفاده از آن پورت ریکوئست خود را بسته به اینکه از HTTP استفاده کنیم یا HTTPS روی پورت 80 یا 443 برای سرور به صورت یک HTTP Request ارسال می‌کند (برای کسب اطلاعات بیشتر، می‌توانید به آموزش آشنایی با پورت‌های پروتکل HTTP مراجعه نمایید.) به عبارتی، هر تَب و هر مرورگر پورت مخصوص به خودش را دارد و با هر بار تکرار این ریکوئست، این پورت ممکن است به کلی عوض بشود. در واقع، مرورگر ریکوئست شما را در پروتکل HTTP به صورت زیر در می‌آورد:

Request-method-name Request-URI HTTP-version
Request-header-name: Request-header-value1, Request-header-value2, ...

Request-message-body

همان‌طور که می‌بینید، خط اول از سه بخش تشکیل شده است که در بخش اول HTTP Method قرار می‌گیرد که می‌تواند یکی از متدهای PUT ،POST ،GET و یا UPDATE باشد (البته متدهای نام‌ برده شده به عنوان اصلی‌ترین متدها بوده و به غیر این موارد، متدهای بیشتری نیز وجود دارند که برای کسب‌ اطلاعات بیشتر می‌توانید به آموزش متدهای اصلی در پروتکل HTTP مراجعه نمایید.) در بخش دوم مسیری قرار می‌گیرد که در سرور منبع قرار دارد و در بخش سوم ورژن HTTP که می‌خواهیم استفاده کنیم قرار خواهد گرفت (به این دلیل از لفظ Resource به معنی «منبع» استفاده می‌کنیم که ریکوئست شما ممکن است یک صفحۀ معمولی وب، یک فایل ویدئویی، دانلود یک فایل و ... باشد و هر کدام از این ریکوئست‌ها به یک فایل با فرمت مشخصی در سرور منتهی می‌شود.)

در خط دوم به بعد هِدِرهای HTTP قرار می‌گیرند که بسته به مرورگر، سرور و ... مقادیر مختلفی به صورت اصطلاحاً Key:Value در آن قرار می‌گیرند. Key در واقع Header Name می‌باشد و مهم‌ترین Header Name که در هِدِر باید وجود داشته باشد Host است که بیانگر آدرس سروری می‌باشد که ریکوئست مرورگر باید به سمت آن ارسال شود و از دیگر مقادیر مهم آن می‌توان به User Agent و Accept Language اشاره کرد.

بعد از یکسری Header Name مختلفی که در ریکوئست ما قرار گرفتند، یک خط خالی قرار می‌گیرد و پس از آن قسمت Body پُر می‌شود. به مقادیری که قبل از خط خالی قرار می‌گیرند به صورت کلی بخش HTTP Header گفته می‌شود و مقادیری که بعد از خط خالی می‌آیند بخش Body را تشکیل می‌دهند.

برای روشن‌تر شدن مسئله، اجازه بدهید بحث را با یک مثال دنبال کنیم. مثلاً هنگامی که شما در مرورگر خود آدرس وب‌سایت سکان آکادمی را وارد می‌کنید، مرورگر ریکوئست شما را به صورت زیر در می‌آورد:

GET /index.html HTTP/1.1

Host: www.sokanacademy.com

خط اول به ما می‌گوید که با استفاده از ورژن 1.1 پروتکل HTTP یک فایل با نام index.html که در مسیر / قرار دارد که احتمالاً همان جایی که وب‌سرور به عنوان روت می‌شناسد را از سرور درخواست می‌کنیم تا در اختیارمان قرار دهد و در خط دوم، که هِدِرها از همین خط شروع می‌شوند، هِدِری به نام Host را می‌بینیم که مقدار آن همان اسم سروری است که ریکوئست ما باید به آن ارجاع داده شود که در این مثال www.sokanacademy.com می‌باشد. در این مرحله، کار مرورگر یا در واقع کلاینت تمام می‌شود و فعل و انفعالاتی در حین راه تا رسیدن به مقصد انجام می‌شود که در ادامه آن‌ها را بررسی خواهیم کرد.

online-support-icon