🏗 اجزای سازنده سیستمهای مبتنی بر HTTP
گفتیم HTTP یک پروتکل کلاینت-سرور (Client-Server) است: درخواستها توسط یک موجودیت به نام User-agent (یا یک پروکسی به نمایندگی از آن) ارسال میشوند. 👤
اغلب اوقات،User-agent همان مرورگر وب است، اما میتواند هر چیزی باشد؛ برای مثال، یک ربات که وب را میخزد تا ایندکس موتور جستجو را پر کرده و نگهداری کند.
هر درخواست مجزا به یک سرور ارسال میشود، که آن را مدیریت کرده و پاسخی به نام پاسخ (Response) ارائه میدهد. بین کلاینت و سرور، موجودیتهای متعددی وجود دارند که در مجموع پروکسیها (Proxies) نامیده میشوند و عملیاتهای مختلفی را انجام میدهند و مثلاً به عنوان دروازه (Gateways) یا کشها (Caches) عمل میکنند. 🛡
⚠️ ملاحظات لایههای زیرین
در واقعیت، کامپیوترهای بیشتری بین یک مرورگر و سروری که درخواست را مدیریت میکند، وجود دارند: مسیریابها (Routers)، مودمها و غیره. به لطف طراحی لایهای وب، این موارد در لایههای Network و Transport پنهان هستند. HTTP در بالا، در Application Layer قرار دارد. اگرچه لایههای زیرین برای تشخیص مشکلات شبکه مهم هستند، اما در توصیف HTTP عمدتاً بیربط تلقی میشوند.
1️⃣ کلاینت: (User-agent)
گفتیم User-agent هر ابزاری است که از طرف کاربر عمل میکند. این نقش در درجه اول توسط مرورگر وب انجام میشود، اما همچنین ممکن است توسط برنامههایی که مهندسان و توسعهدهندگان وب برای Debug کردن برنامههای خود استفاده میکنند، ایفا شود. 🛠
مرورگر همیشه موجودیتی است که درخواست را آغاز میکند. این کار هرگز توسط سرور انجام نمیشود (اگرچه مکانیسمهایی در طول سالها برای شبیهسازی پیامهای آغاز شده توسط سرور اضافه شدهاند).
📖 فرایند نمایش صفحه
برای نمایش یک صفحه وب، مرورگر یک درخواست اولیه برای واکشی سند HTML که نمایانگر صفحه است، ارسال میکند. سپس این فایل را تجزیه (Parse) میکند و درخواستهای اضافی مربوط به اسکریپتهای اجرایی، اطلاعات طرحبندی (CSS) برای نمایش، و زیرمنابع موجود در صفحه (معمولاً تصاویر و ویدئوها) را ایجاد میکند. سپس مرورگر وب این منابع را ترکیب میکند تا سند کامل، یعنی صفحه وب را ارائه دهد. اسکریپتهایی که توسط مرورگر اجرا میشوند، میتوانند منابع بیشتری را در مراحل بعدی واکشی کنند و مرورگر صفحه وب را بر اساس آن بهروز میکند. 🔄
🔗 مفهوم Hypertext
یک صفحه وب یک سند Hypertext است. این بدان معنی است که برخی از بخشهای محتوای نمایش داده شده، لینک هستند که میتوانند فعال شوند (معمولاً با کلیک ماوس) تا یک صفحه وب جدید واکشی شود و به کاربر اجازه میدهد تا عامل کاربر خود را هدایت کرده و در وب ناوبری (Navigate) کند. مرورگر این دستورالعملها را به درخواستهای HTTP ترجمه میکند و پاسخهای HTTP را تفسیر میکند تا یک پاسخ واضح به کاربر ارائه دهد.
2️⃣ سرور وب (The Web Server)
در سمت مخالف کانال ارتباطی، سرور قرار دارد که سندی را که توسط کلاینت درخواست شده است، سرو (Serve) میکند. 💾
یک سرور از نظر مجازی فقط به عنوان یک ماشین واحد ظاهر میشود؛ اما در واقع ممکن است مجموعهای از سرورها باشد که بار را به اشتراک میگذارند (Load Balancing)، یا نرمافزارهای دیگری (مانند کشها، یک سرور پایگاه داده، یا سرورهای تجارت الکترونیک)، که سند را به طور کامل یا جزئی بر اساس درخواست تولید میکنند.
نکته: یک سرور لزوماً یک ماشین واحد نیست، بلکه چندین نمونه نرمافزار سرور میتوانند روی یک ماشین میزبانی شوند. با HTTP/1.1 و هدر Host، حتی ممکن است آدرس IP یکسانی داشته باشند. 🏠
3️⃣ پروکسیها (Proxies)
بین مرورگر وب و سرور، کامپیوترها و ماشینهای متعددی پیامهای HTTP را منتقل میکنند. به دلیل ساختار لایهای پشته وب، اکثر اینها در لایههای انتقال، شبکه یا فیزیکی عمل میکنند و در لایه HTTP شفاف میشوند و به طور بالقوه تأثیر قابل توجهی بر عملکرد دارند. ⚙️
آنهایی که در لایههای کاربرد عمل میکنند، عموماً پروکسیها نامیده میشوند. این پروکسیها میتوانند شفاف (Transparent) باشند و درخواستهایی را که دریافت میکنند بدون هیچ تغییری به جلو ارسال کنند، یا غیرشفاف (Non-transparent) باشند، که در این صورت قبل از ارسال درخواست به سرور، آن را به نحوی تغییر خواهند داد.
🎯 وظایف پروکسیها
پروکسیها ممکن است عملکردهای متعددی را انجام دهند:
🔹️کشینگ (Caching): (کش میتواند عمومی یا خصوصی باشد، مانند کش مرورگر)
🔹️فیلترینگ (Filtering): (مانند اسکن آنتیویروس یا کنترل والدین) 🛡
🔹️توزیع بار (Load Balancing): (برای اجازه دادن به سرورهای متعدد برای ارائه درخواستهای مختلف)
🔹️احراز هویت (Authentication): (برای کنترل دسترسی به منابع مختلف)
🔹️ثبت وقایع (Logging): (اجازه ذخیره اطلاعات تاریخی) 📜