آیا تا به حال فکر کردهاید که چگونه با یک کلیک ساده به میلیونها وبسایت دسترسی پیدا میکنید؟ هر بار که صفحهای را باز میکنید، یک سیستم پیچیده و نامرئی در پسزمینه در حال کار است. این سیستم به شما امکان میدهد که به اطلاعات، تصاویر، ویدیوها و هرچه در دنیای وب وجود دارد، به سرعت و راحت دسترسی پیدا کنید. اما چه چیزی باعث میشود این ارتباط سریع و بیوقفه برقرار شود؟ پاسخ به این سؤال در یک فناوری کلیدی به نام HTTP نهفته است.
پروتکل HTTP یا Hypertext Transfer Protocol دقیقا همان چیزی است که ارتباط بین مرورگر شما و سرورهای وب را ممکن میسازد و به شما اجازه میدهد در اینترنت گشتوگذار کنید. اما HTTP چیست و چگونه کار میکند؟ در این مقاله از بلاگ آسا قرار است در مورد این پروتکل مهم دنیای وب صحبت کنیم، با ما همراه باشید.
پروتکل HTTP چیست؟
پروتکل انتقال ابرمتن (Hypertext Transfer Protocol) که معمولا به آن HTTP گفته میشود، یک پروتکل پایه وب است که امکان تبادل اطلاعات بین کلاینت (مرورگر وب) و سرور را فراهم میکند. به عبارت ساده، HTTP مانند زبانی است که به مرورگر وب و سرور اجازه میدهد تا یکدیگر را درک کنند و با یکدیگر تعامل داشته باشند.
بنابراین، HTTP یک پروتکل برای انتقال ابرمتن بین سرور و کلاینت است؛ اما خود ابرمتن چیست؟ ابرمتن یا هایپرتکست یک سند متنی بزرگ است که با زبان نشانهگذاری (HTML) نوشته میشود. این متون، در ظاهر تنها از حروف و کلمات تشکیل شدهاند، اما میتوانند شامل انواع مختلفی از عناصر چندرسانهای مثل تصاویر، ویدئوها، جدولها و البته لینکها به سایر صفحات باشند. برای مشاهده یک ابرمتن یک وبسایت عادی را باز کنید، سپس با کلیک راست کردن به گزینهها بروید و گزینه «inspect» یا «view page source» را انتخاب کنید تا کدهایی که ابرمتن یک وبسایت را میسازند را ببینید.
HTTP چگونه کار میکند؟
پروتکل HTTP بر اساس مدل درخواست-پاسخ کار میکند، جایی که کلاینت (معمولا یک مرورگر وب یا یک برنامه کاربردی) درخواستی را به یک وب سرور ارسال میکند. سپس سرور با ارائه دادههای لازم به آن درخواست پاسخ میدهد. به عنوان مثال، وقتی یک آدرس URL را در نوار آدرس مرورگر خود وارد میکنید و «Enter» را فشار میدهید، مرورگر یک درخواست HTTP را به سرور میزبان آن صفحه وب ارسال میکند.
سرور درخواست را پردازش میکند و یک پاسخ HTTP حاوی اطلاعات درخواستی، به عنوان مثال، اطلاعات مورد نیاز برای بارگذاری یک وبسایت را ارسال میکند. سپس مرورگر پاسخ را دریافت و پردازش میکند، به این ترتیب یک صفحه وب در صفحه مرورگر شما ظاهر میشود. بیایید کمی عمیقتر به مراحل و نحوه کار HTTP نگاه کنیم.
۱. ارسال درخواست (Request)
همه چیز از سمت مرورگر شما شروع میشود. مرورگر شما به عنوان یک کلاینت عمل میکند و بهمحض اینکه آدرس یک وبسایت را وارد کردید، یک درخواست (HTTP Request) به سرور آن سایت ارسال میکند. این درخواست حاوی اطلاعاتی مثل نوع درخواست، آدرس صفحه و اطلاعات اضافی (مانند نوع مرورگر شما، سیستمعاملی که استفاده میکنید و حتی کوکیها) است.
۲. پاسخ از سمت سرور (Response)
بعد از اینکه درخواست شما به سرور رسید، سرور آن را پردازش میکند و بر اساس محتوای درخواست، پاسخی میفرستد. این پاسخ (HTTP Response) شامل اطلاعاتی است که مرورگر شما برای نمایش وبسایت نیاز دارد. پاسخ سرور میتواند شامل کد وضعیت (Status Code)، بدنه پاسخ (Response Body) و هدرها (Headers) باشد که در ادامه بیشتر به آنها میپردازیم.
۳. پردازش و نمایش صفحه
مرورگر بعد از دریافت پاسخ از سرور، باید اطلاعات را تفسیر و پردازش کند تا شما بتوانید صفحه وب را مشاهده کنید. مرورگر ابتدا کد HTML صفحه را تجزیه میکند، سپس به دنبال فایلهای جانبی مثل تصاویر، CSS و جاوا اسکریپت میگردد.
نکتهای که در این مرحله وجود دارد، نحوه پردازش اطلاعات است و به نحوه برنامهنویسی وبسایت برمیگردد. به عنوان مثال، وبسایتهایی که به زبان react و vue نوشته شدهاند در سمت کلاینت (مرورگر) پردازش میشوند و وبسایتهایی که از فریمورکهای NextJS و NuxtJS بهره میبرند، قابلیت پردازش در سمت سرور را ارائه میدهند.
۴. ارسال درخواستهای اضافی
ممکن است صفحهای که درخواست کردهاید دارای منابعی مثل تصاویر، ویدیوها یا دیگر فایلهای رسانهای باشد که باید بهصورت جداگانه از سرور دانلود شوند. مرورگر برای هر یک از این منابع، درخواستهای اضافی HTTP را به سرور میفرستد تا همهی محتوای لازم را بارگذاری کند.
در بسیاری از موارد، مرورگر شما از حافظه کش (Cache) استفاده میکند تا فرایند بارگذاری صفحه را سریعتر کند. مثلا اگر قبلا به این وبسایت سر زده باشید، ممکن است مرورگر برخی از فایلها مثل تصاویر یا CSS را ذخیره کرده باشد و دیگر نیازی به درخواست دوباره از سرور نباشد. این کار باعث میشود که صفحات با سرعت بیشتری بارگذاری شوند.
۵. قطع اتصال
پس از اینکه همه اطلاعات لازم بین مرورگر و سرور رد و بدل شد، اتصال بین آنها قطع میشود. HTTP یک پروتکل بدون وضعیت (stateless) است؛ یعنی بعد از هر درخواست و پاسخ، هیچ اطلاعاتی درباره درخواست قبلی نگه داشته نمیشود. بههمین دلیل، هر بار که صفحهای جدید بارگذاری میشود، تمام فرایند دوباره از نو شروع میشود.
در ادامه دو مرحله اصلی این پروتکل، یعنی ارسال درخواست و دریافت پاسخ را بررسی میکنیم.
ارسال درخواست در HTTP چگونه انجام میشود؟
در قسمت قبل، نحوه کار پروتکل HTTP بررسی کردیم و دیدیم که اولین مرحله، ارسال درخواست است. درخواست HTTP پیامی است که یک سرویسگیرنده (مرورگر وب) برای یک کار خاص مثل دریافت اطلاعات وبسایت، به یک سرور ارسال میکند. یک درخواست HTTP از چندین مؤلفه تشکیل شده است که اطلاعات لازم را برای پردازش درخواست و ارائه پاسخ مناسب حمل میکند که شامل اجزای زیر است.
خط درخواست (Request Line)
یک خط درخواست شامل متدهای اچتیتیپی (GET، POST، PUT یا DELETE) است که عملکرد موردنظر، آدرس URL ، محل منابع وب و نسخه پروتکل HTTP را نشان میدهد.
هدر درخواست (Request Header)
هدر درخواست حاوی اطلاعات اضافی در مورد درخواست است؛ مثل نوع مرورگر، انواع محتوای پذیرفته شده، اطلاعات عامل کاربر، نشانههای احراز هویت و کوکیها.
بدنه درخواست (Request Body)
در بسیاری از درخواستهای HTTP، بهویژه درخواستهایی که از متد POST، PUT و PATCH استفاده میکنند، علاوه بر خط درخواست و هدرها، یک بدنه درخواست (Request Body) هم وجود دارد. این بدنه شامل دادههایی است که کلاینت به سرور ارسال میکند و چیز خاصی را به سرور میگوید، مانند ارسال فرم، ارسال داده برای بهروزرسانی نمایه یا آپلود یک فایل.
این سه بخش با هم یک درخواست HTTP را تشکیل میدهند که به سرور ارسال میشود تا کلاینت بتواند اطلاعات لازم را دریافت کند یا دادههایی را به سرور بفرستد.
دریافت پاسخ در HTTP چگونه انجام میشود؟
پاسخ HTTP پیامی است که سرور در پاسخ به درخواست HTTP برای کلاینت ارسال میکند. این پاسخ شامل دادههای درخواست شده توسط کلاینت، متا دیتاهای اضافی و اطلاعات وضعیت در مورد موفقیت یا عدم موفقیت درخواست است. پاسخهای HTTP معمولا شامل اطلاعات زیر است:
خط وضعیت (Status Line)
این اولین خط پاسخ است که شامل نسخه HTTP، کد وضعیت و پیام وضعیت است. کد وضعیت یک عدد سه رقمی است که وضعیت پاسخ سرور را نشان میدهد. این کدها در ۵ دسته اصلی قرار دارند که کد معروف ۴۰۴ یکی از آنهاست. پیام وضعیت هم یک توصیف مختصر از وضعیت پاسخ است که بیان میکند چه اتفاقی برای ارسال پاسخ رخ داده است، مانند OK یا Not Found. مثالی از یک خط وضعیت که نشان میدهد درخواست با موفقیت انجام شده است: HTTP/1.1 200 OK
هدر پاسخ (Response Headers)
هدرهای پاسخ مشابه هدرهای درخواست، اطلاعات اضافی در مورد پاسخ سرور را ارائه میدهند. این اطلاعات میتواند شامل نام سرور، تاریخ ارسال پاسخ، نوع محتوای ارسالی و طول آن باشد که به صورت یک کلید-مقدار نمایش داده میشود.
یک خط خالی
بعد از هدرهای پاسخ، یک خط خالی (یا یک خط جداگانه شامل فقط \r\n ) وجود دارد که به عنوان جداکننده بین هدرها و بدنه پاسخ استفاده میشود.
بدنه پاسخ (Response Body)
بدنه پاسخ آخرین بخش از پاسخ HTTP محسوب میشود که حاوی دادههای ارسالی از سرور به کلاینت است. این دادهها معمولا شامل HTML برای نمایش صفحه وب، متن ساده، تصاویر، فایلهای PDF و غیره است. کد زیر سادهترین مثال از یک بدنه پاسخ است:
<!DOCTYPE html> <html> <head> <title>Example Page</title> </head> <body> <h1>Hello, World!</h1> <p>This is an example page.</p> </body> </html>
هر زمان که شما یک صفحه وب را باز میکنید، بخشهای بالا کنار هم قرار میگیرند تا به درخواست شما پاسخ دهند.
تفاوت HTTP و HTTPS چیست؟
پروتکل HTTP یک پروتکل کامل است اما ایمن نیست! در این پروتکل، اطلاعاتی که بین کلاینت (مرورگر) و سرور منتقل میشوند، به صورت یک متن ساده HTML هستند. بنابراین هر کسی که به دادههای در حال انتقال دسترسی پیدا کند (مثلا از طریق حمله Man-in-the-Middle) به راحتی میتواند محتوای پیامها را بخواند. به همین دلیل بود که پروتکل HTTPS ساخته شد. پروتکل HTTPS، نتیجه لایهبندی پروتکل انتقال ابرمتن (HTTP) روی پروتکل SSL/TLS است که قابلیتهای امنیتی کاملی را به HTTP اضافه میکند.
بر خلاف پروتکل HTTP، پروتکل HTTPS دادههای منتقل شده بین کلاینت و سرور را به یک فرمت غیرقابل خواندن رمزگذاری میکند و به این صورت از آن در برابر تهدیدهای بالقوه در حوزه امنیت سایبری محافظت خواهد کرد. حتی اگر HTTPS تشخیص دهد که دادههای مبادله شده بین مشتری و سرور توسط اشخاص غیرمجاز تغییر یافته است، سرور اتصال را میبندد و ارتباط را قطع میکند.
سخن پایانی
در این مطلب سعی کردیم به زبان ساده پروتکل HTTP را توضیح دهیم اما باید بدانید که سالها تحقیق و توسعه انجام شده تا بتوانیم اینترنت را به شکل امروزی آن تجربه کنیم. HTTP یک فناوری پیچیده است که دسترسی ما به میلیونها وبسایت را ممکن میکند، بدون اینکه نیازی به درک عمیقی از نحوه کارکرد آن داشته باشیم.
منابع:
www.techtarget.com | www.developer.mozilla.org | www.cloudflare.com
دیدگاهتان را بنویسید