هنگامی که برای اولین بار شروع به یادگیری نام دامنه ها، آدرس های IP، وب سرورها، و نحوه کار آنها با هم می کنید، شاید برایتان کمی گیج کننده باشد. چگونه همه اینها در کنار هم کار می کنند؟

سوال اصلی این است که:

آیا هر وب سرور تنها می تواند یک وب سایت را نگه می دارد؟ و اگر وب سرورها بیش از یک وب سایت را نگه دارند، چگونه قادر هستیم بدون هیچ مشکلی به سایت های مورد نظر دسترسی پیدا کنیم؟ به طور کلی آیا هر وب سروری تنها به یک وب سایت پاسخ می دهد یا بیشتر؟

پاسخ:

در واقع، مرورگر شامل نام دامنه در درخواست های HTTP است، به طوری که وب سرور می داند که کدام دامنه درخواست شده و بر این اساس به آن پاسخ می دهد.

درخواست های HTTP

نحوه انجام درخواست های HTTP به صورت زیر است:

1.کاربر یک URL به فرم http://host:port/path ارائه می دهد.

2.مرورگر بخش هاست یا دامنه URL را بیرون کشیده و در صورت لزوم در یک فرایند با نام resolution، آن را به صورت یک آدرس IP ترجمه می کند. این ترجمه می تواند از طریق DNS اتفاق بیفتد.

3.مرورگر یک ارتباط TCP را برای یک پورت مشخص و یا به طور پیش فرض پورت 80 آن آدرس IP باز می کند.

4.مرورگر یک درخواست HTTP می فرستد. برای HTTP/1.1 به صورت زیر است:

هاست هیدر استاندارد است و در HTTP/1.1 مورد نیاز است. با اینکه در تنظیمات HTTP/1.0 مشخص نشده اما برخی از سرورها از آن پشتیبانی می کنند.

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

-آدرس IP درخواست شده از سوکت TCP( آدرس IP کلاینت هم در دسترس  است، اما این به ندرت استفاده می شود و گاهی اوقات مسدود یا فیلتر است)

-پورت درخواست شده، از سوکت TCP

-نام هاست درخواستی، به طوری که توسط مرورگر در درخواست HTTP در هاست هیدر مشخص شد

-مسیر درخواست

-هیدرهای دیگر مانند کوکی ها

همانطور که باید متوجه شده باشید، امروزه متداول ترین راه اندازهای هاست وب سایت های متعددی را بر روی ترکیب یک آدرس IP و پورت قرار می دهند. این در Apache-land با نام هاست مجازی بر اساس نام شناخته شده است، در حالی که Nginx آنها را نام های سرور در بلوک های سرور می نامد و IIS آنها را سرورهای مجازی می خواند.

HTTPS به چه صورت هستند؟

HTTPS کمی متفاوت هستند. روند آن تا ساخت یک اتصال TCP یکسان است، اما بعد از آن یک تونل رمز شده TLS باید برقرار شود. هدف این است که هیچ اطلاعاتی در مورد درخواست افشا نشود.

به منظور تایید اینکه وب سرور دارای دامنه خود است، وب سرور باید یک گواهی امضا شده را توسط یک شخص ثالث ارسال کند. مرورگر سپس این گواهی را با دامنه درخواست شده آن مقایسه خواهد کرد.

در  اینجا یک مشکل پیش می آید: چگونه وب سرورها می دانند که گواهی کدام سایت یا هاست را ارسال کنند؟

به طور سنتی، این مشکل با داشتن یک آدرسIP اختصاصی برای هر وب سایتی که نیاز به HTTPها دارد حل می شود. بدیهی است از آنجایی که ما آدرسهای IPv4 را اجرا می کنیم این به یک مشکل تبدیل شده است.

بایدSNI یا نشانگر نام سرور را وارد کنید. سپس مرورگر نام هاست را در طول TLS دور می زند، بنابراین وب سرور این اطلاعات به موقع را برای ارسال گواهی درست کافی می داند. در سمت وب سرور، پیکربندی بسیار شبیه به نحوه پیکربندی هاست های مجازی HTTP است.

نکته منفی این است که که نام هاست در حال حاضر به عنوان یک متن ساده قبل از رمزگذاری دور زده شده است، و اساسا اطلاعات به بیرون درز پیدا می کند.

اگر یک وب سایت را تنها با یک آدرس IP درخواست دهید به چه صورت است؟

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

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