پروتکل HTTP قسمت سوم

پیش از آغاز بحث، یک مرور بر آنچه تا کنون اشاره کردیم بپردازیم.تا اینجا خیلی ساده، فهمیدیم که "کلاینت" (Client) و "سرور" (Server) از طریق دروازه های خودشون، یعنی "مرورگر" (Browser) برای کلاینت و "IIS" برای سرور، از طریق پروتکل HTTP و در قالب درخواست(Request) و پاسخ (Response) باهم ارتباط برقرار میکنند.همینطور گفتیم تا درخواستی نیاد، خود به خود از سمت سرور پاسخ نخواهد اومد.اما درخواست چطور عملی میشه؟ به عبارت بهتر ما چطور درخواست میدیم به سرور.پاسخش میشه از طریق URL.بیایم ساده ترین حالت رو فرض کنیم. شما به عنوان کلاینت، بعد از اینکه اتصالتون به اینترنت محقق شد، مرورگر خودتون رو باز میکنید و یک آدرس اینترنتی، مثلا www.youtube.com رو در قسمت URL مرورگرتون میزنید.اصولا URL از چند قسمت تشکیل میشه:قسمت اول : پروتکله. پروتکل های دیگری هم مثل HTTPS، FTP هستند.HTTPS برای ارتباط امن یا Secure استفاده میشه و FTP برای انتقال فایل از سرور.قسمت دوم، که در واقع ترکیبی از 3، 4 و 5، همه اش باهم Host یا Hostname (نام میزبان)، گفته میشه. هاست خودش از SubDomain، Domain و Top Level Domain یا به اختصار TLD تشکیل شده. البته به کل youtube.com هم دامین گفته میشه.یادآوری که این در واقع همون IP آدرسیه که به یک نام خوانا مپ شده.TLD ها دسته بندی موضوعی دامین رو مشخص میکنند. مثلا edu داره میگه که این سایت، یک سایت آموزشیه. یا gov میگه این سایت یک سایت دولتی است و ...بعد از TLD،اگر از port پیشفرض پروتکل استفاده نمیکنیم، باید شماره پورت رو هم بیاریم. پورت پیشفرض HTTP برابر است با 80 و برای HTTPS برابر است با 443. اگر از این دو پورت داریم استفاده میکنیم لازم نیست در URL شماره پورت رو بنویسیم وگرنه باید با : شماره پورت رو هم در آدرس بیاریمقسمت ششم، Path یا مسیر، که در واقع محل قرار گیری فولدری این صفحه یا Resource رو در سرور مشخص میکنه. اگر صفحه HTML یا Resource ای که ما بهش URL دادیم، در فولدر اصلی اون وبسایت باشه، Path نداره.ولی اگر در زیرشاخه های اون فولدر اصلی در سرور باشه، Path مسیر اون زیرشاخه رو نشون میده.از علامت ؟ به بعد، در واقع مقادیریه که ما داریم به سمت سرور به عنوان پارامتر ارسال میکنیم. که این مقادیر یا پارامتر ها، به شکل name - value یا عنوان - مقداری فهرست میشوند که اصطلاحا بهشون Query string یا رشته پرس و جو، میگن. ما میتونیم بیشتر از 1 دونه Query string یا پارامتر نام- مقداری داشته باشیم که در این صورت با & از هم جدا میشوند. مثلا فرض کنید من در سایتی دارم ثبت نام میکنم و بعد با ثبت، دارم به مسیر یک متد( با دید MVC، یک اکشن) در سرور با درخواست خودم هدایت میشوم که اطلاعات من به شکل Query string بهش ارسال میشه : name=azadeh&family=khorsandnia.خب، این از URL.لازم به ذکر است که URL در اختیار کلاینت نیست. اصولا URL ها رو نمیتونند کلاینت ها به دلخواه خودشون تنظیم کنند.URL باید وجود داشته باشه و وجود داشتنشم در سروره و کلاینت دقیقا باید به همون آدرسی که در سمت سرور براش مشخص شده، درخواست بده. وگرنه کلاینت هیچ واکنشی جز خطا که حالا راجع بهش صحبت میکنیم، نمیبینه.اما یک قسمتی در آدرس یا URL هست که در اختیار کلاینته و بعد از کوئری استرینگ با # جدا میشه و بهش Fragment یا در بعضی منابع Anchor، میگن. اینکه میگم در اختیار کلاینته، یعنی این بخش بندی ها با درخواست اولیه به سمت کلاینت میاد و در مرورگر هست و مرورگر داره کنترل میکنه. در سایت هایی که صفحات بزرگی دارند، طراحان میتونند تقسیم بندی هایی برای صفحه مشخص کنند که اصطلاحا بهشون لنگر میگن، و این بخش بندی ها سمت کلاینت میاد و با کلیک کاربر روی صفحه، بلافاصله به اون مکان میره و دیگه بابتش درخواستی به سرور نمیره.