AmirTorn
AmirTorn
خواندن ۱۲ دقیقه·۲ سال پیش

پروتکل HTTP چیست؟

اگر میخواهی با مفهم پروتکل ها و پروتکل HTTP آشنا بشی مقاله انواع پروتکل های TCP/IP بخونید و اگه میخواهید حرفه ای تر با پروتکل HTTP آشنا بشید تا آخر این مقاله رو با دقت بخونید

اچ تی تی پی پروتکلی هست که امکان واکشی از منابع HTML رو به ما میدهد. http مبنای هر نو مبادله داده روی وب را تشکیل می دهد و یک پروتکل کلاینت سرور هست یعنی درخواست ها رو از یک مرورگر وب آغاز میشود که به این ترتیب یک سند کامل با ترکیب سند های کوچک و جزئی واکشی میشود مثل یک متن یا تصاویر و ویدیو ها یا اسکریپت ها و... در مرورگر وب بازسازی میشود

بعدا در یک مقاله جدا درباره HTML و اسکریپت ها حرف میزنیم

نحوه کار پروتکل http :

کلاینت‌ها و سرورها از طریق مبادله پیام‌های بر عکس جریان داده‌ها با هم ارتباط می‌گیرند. این پیام‌ها از سوی یک مرورگر وب که همون کلاینت هست ارسال میشوند (درخواست) نام دارد. از سوی دیگر پیام‌هایی که از سوی سرور ارسال می‌شوند، (پاسخ) نامیده می‌شوند.

پروتکل HTTP کی و چطوری تعریف شد ؟

پروتکل HTTP در اوایل دهه 1990 میلادی تعریف شده و یک پروتکل قابل بسط است که در طی زمان تکامل یافته است. این پروتکل در لایه اپلیکیشن شبکه قرار دارد و روی اتصال TCP یا روی یک اتصال TCP رمزنگاری شده با TLS ارسال می‌شود. با این حال هر پروتکل انتقال پایداری می‌تواند به این منظور مورد استفاده قرار گیرد. پروتکل HTTP با توجه به بسط‌پذیری خود نه تنها برای واکشی اسناد ابرمتن بلکه برای واکشی اسناد و تصاویر یا برای ارسال محتوا به سرورها مانند نتایج یک فرم HTML نیز استفاده می‌شود. از پروتکل HTTP می‌توان برای واکشی بخش‌هایی از سند برای به‌روزرسانی صفحه‌ های وب بنا به تقاضا هم استفاده کرد.

اجزای سیستم HTTP :

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

هر درخواست منفرد یا (پیام‌های بر عکس جریان داده‌ها) روی یک سرور ارسال می‌شود که آن را اداره می‌کند و یک پاسخ ارائه می‌دهد که response نام دارد. البته بین کلاینت و سرور، نهادهای زیادی وجود دارند که در مجموع واسطه‌ ها نام دارند و عملیات متفاوتی را اجرا کرده و برای نمونه به عنوان یک کش عمل می‌کنند.

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

کلاینت:

عامل کاربر به هر ابزاری گفته می‌شود که به دستور از کاربر عمل کند. این نقش به طور عمده از سوی مرورگر وب اجرا می‌شود. امکان اجرای آن از سوی برنامه‌های دیگر که از سوی مهندسان و توسعه‌دهندگان وب برای دیباگ اپلیکیشن‌ها استفاده می‌شوند نیز وجود دارد.

مرورگر همیشه آن چیزی است که درخواست را آغاز می‌کند. بنابراین سرور هرگز آغازگر تبادل پیام نیست، گرچه در طی سال‌های اخیر برخی مکانیسم‌هایی به HTTP اضافه شده‌اند که پیام‌های آغازشده از سوی سرور را شبیه‌سازی می‌کنند.

مرورگر برای عرضه یک صفحه وب، درخواستی ابتدایی جهت واکشی سند HTML ارسال می‌کند که یک بازنمایی از صفحه است. سپس این فایل تحلیل می‌شود و درخواست‌های متناظر دیگری برای اجرای اسکریپت‌ها، اطلاعات چیدمان صفحه CSS و منابع فرعی قرار گرفته درون صفحه که عموماً شامل تصاویر و ویدئوها است ارائه می‌شود. در ادامه مرورگر وب این منابع را با هم ترکیب می‌کند تا یک سند کامل را به کاربر عرضه کند که صفحه وب نامیده می‌شود. اسکریپت‌های اجرا شده از سوی مرورگر می‌توانند منابع بیشتری را در فازهای بعدی واکشی کنند و مرورگر بر همین اساس صفحه وب را به‌روزرسانی می‌کند.

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

بعدا در یک مقاله جدا درباره CSS حرف میزنیم

وب سرور :

در سمت دیگر این کانال ارتباطی یک سرور قرار دارد که اسناد درخواستی از سوی کاربر را عرضه می‌کند. سرور مجازاً به صورت یک رایانه منفرد ظاهر می‌شود، اما ممکن است مجموعه‌ای از سرورها باشند که بار کاری را با هم به اشتراک بگذارند یا یک نرم‌افزار پیچیده باشد که از رایانه‌های دیگر که مسئول بخش‌های کش، پایگاه داده، یا سرورهای e-commerce پرس‌وجو کرده و سند را بسته به تقاضا به صورت کامل یا جزء به جزء تولید می‌کند.

سرور حتما یک رایانه منفرد نیست، بلکه چند وهله نرم‌افزاری مختلف سرور می‌توانند روی یک رایانه منفرد میزبانی شوند. با استفاده از نسخه 1.1 پروتکل HTTP و هدر Host حتی امکان اشتراک نشانی IP یکسان نیز وجود دارد.

واسطه‌ها :‌

بین مرورگر وب و سرور، رایانه‌ها و دستگاه‌های بسیار زیادی قرار می‌گیرند که پیام‌های HTTP را رله می‌کنند. به دلیل ساختار لایه‌بندی‌شده وب، اغلب این دستگاه‌ها روی لایه انتقال یا شبکه یا لایه فیزیکی عمل می‌کنند و در HTTP نمایش داده میشه و از این رو می‌توانند تأثیر عمده‌ای روی عملکرد داشته باشند. عناصری که روی لایه‌های اپلیکیشن عمل می‌کنند، عموماً واسطه‌ها نامیده می‌شوند. این موارد می‌توانند شفاف باشند و درخواست‌هایی که دریافت می‌کنند را بدون هیچ گونه دستکاری، فوروارد کنند یا این که غیر شفاف باشند و در این حالت درخواست را پیش از ارسال به سمت سرور مورد نوعی تغییر قرار می‌دهند. واسطه‌ها می‌توانند کارکردهای زیادی را اجرا کنند.

  • کش کردن : کش می‌تواند عمومی یا خصوصی مثل کش مرورگر باشد
  • فیلترینگ : مثل اسکن آنتی‌ویروس یا کنترل والدین
  • متعادل‌سازی بار : یا Load Balancing به چندین سرور امکان می‌دهد که درخواست‌های مختلف را پاسخ دهند
  • احراز هویت : برای کنترل دسترسی به منابع مختلف استفاده می‌شود
  • لاگ کردن : امکان ذخیره اطلاعات تاریخی را فراهم می‌ کند

خب حلا بریم چنتا سوال درباره پروتکل http را جواب بدیم :

  • آیا http ساده هست ؟ بله با وجود پیچیدگی های که در http هست ولی بازم توسط افراد مبتدی هم درک میشود
  • آیا http قابل بسط است ؟ هدر های HTTP که در نسخه HTTP/1.0 معرفی شده‌اند موجب می‌شوند که بسط این پروتکل و آزمایش کردن آن آسان باشد کارکرد های جدید می‌توانند حتی با یک توافق ساده بین یک کلاینت و سرور در مورد معناشناسی تازه هدرها برقرار شوند.
  • آیا http حالت ندارد ؟ ولی بجاش نشست دارد ؟ اچ تی تی پی فاقد حالت هست یعنی هیچ پیوندی بین دو درخواست که پشت سر هم روی یک اتصال انتقال می‌یابند، وجود ندارد. این کار موجب می‌شود افرادی که می‌خواهند با صفحه‌های خاصی مانند سبد خرید سایت های فروشگاه‌ی به صورت یکپارچه تعامل پیدا کنند، با مشکل مواجه شوند. اما با این که خود HTTP فاقد حالت است، کوکی‌های HTTP می‌توان از نشست‌های باحالت (انگلیسی : Stateful Sessions) استفاده کرد. با بهره‌گیری از خصوصیت بسط‌ پذیری هدر، کوکی‌های http به گردش کار اضافه می‌شوند و امکان ایجاد نشست را به هر درخواست http می‌دهند تا چارچوب یکسانی را با حالت مشابه به اشتراک بگذارند.

اتصلات Http :

یک اتصال در لایه انتقال، کنترل می‌شود و از این رو اساساً خارج از دامنه http قرار دارد. با این حال پروتکل http برای این که مبتنی بر اتصال باشد، نیازی به لایه زیربنایی انتقال ندارد، و تنها کافی است که پایدار باشد یعنی پیام‌ها را از دست ندهد یا خطایی نشان دهد از میان دو پروتکل نتایج انتقال در اینترنت، TCP پایدار است، اما UDP چنین نیست از این رو پروتکل http روی استاندارد TCP کار می‌کند که مبتنی بر اتصال است.

پیش از آن که یک کلاینت و سرور بتوانند جفت درخواست و پاسخ HTTP را با هم مبادله کنند، باید یک اتصال TCP برقرار سازند و این فرایند نیازمند چندین رفت و برگشت است رفتار پیش‌فرض HTTP/1.0 این است که برای هر جفت درخواست و پاسخ HTTP یک اتصال جدید TCP باز کند. این وضعیت در زمان ارسال چنین درخواست به صورت پشت سر هم، کارآیی کمتری نسبت به اشتراک یک TCP منفرد دارد.

برای رفع این نقیصه، HTTP/1.1 مفهوم Pipelining و اتصال‌های مداوم را معرفی کرده است. به این ترتیب اتصال زیربنایی TCP می‌تواند تا حدودی توسط هر Connection کنترل شود. HTTP/2.2 یک گام پا را بالا تر گذاشته و پیام‌ ها را روی یک اتصال منفرد تقسیم می‌کند و به این ترتیب اتصال TCP بهره‌ وری بالاتری پیدا می‌کند.

اچ تی تی پی چه چیزهایی را می‌تواند کنترل کند ؟

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

فهرست چیز هایی که پروتکل HTTP کنترل میکند :

کش کردن : نحو کش شدن سندها را می‌توان با استفاده از پروتکل HTTP کنترل کرد. سرور می‌تواند به واسطه‌ها و کلاینت‌ها در مورد این که کش کردن چطور و برای چه مدتی انجام شود، دستورالعمل بدهد. کلاینت می‌تواند به واسطه‌های بی‌د‌رنگ کش دستور دهد که سند ذخیره شده را نادیده بگیرند.

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

احراز هویت :‌برخی صفحه‌های وب را می‌توان محافظت کرد، به طوری که تنها کاربران خاصی بتوانند به آن‌ها دسترسی داشته باشند. فرایند ابتدایی احراز هویت می‌تواند از سوی HTTP ارائه شود، که این کار یا از طریق WWW-Authenticate و هدرهای مشابه یا با تعیین یک نشست خاص با استفاده از کوکی‌های HTTP انجام می‌یابد.

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

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

گردش HTTP :

زمانی که یک کلاینت می‌خواهد با یک سرور ارتباط بگیرد، چه یک سرور نهایی و چه پراکسی بی‌درنگ باشد، مراحل زیر را اجرا می‌کند:

  • یک اتصال TCP باز می‌کند : اتصال TCP برای فرستادن یک یا چند درخواست و دریافت یک پاسخ استفاده می‌شود. کلاینت ممکن است یک اتصال جدید باز کند، از اتصال موجود استفاده مجدد نماید یا چند اتصال TCP را به سرور برقرار بسازد
  • ارسال یک پیام HTTP : پیام‌های HTTP ‌پیش از HTTP/2 قابل خواندن از سوی هر فردی هست و با استفاده از HTTP/2 این پیام‌های ساده در فریم‌ ها جاسازی می‌شوند و به این ترتیب دیگر مستقیماً امکان خواندن آن‌ها وجود ندارد، اما اصول کار یکسان است.

به مثال زیر توجه کنید :

درخواست‌های HTTP :

GET / HTTP/1.1 Host: developer.mozilla.org Accept-Language: fr

پاسخ‌ های HTTP :

HTTP/1.1 200 OK Date: Sat, 09 Oct 2010 14:28:02 GMT Server: Apache Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT ETag: &quot51142bc1-7449-479b075b2891b&quot Accept-Ranges: bytes Content-Length: 29769 Content-Type: text/html <!DOCTYPE html... (here comes the 29769 bytes of the requested web page)

بستن یا استفاده مجدد از اتصال برای درخواست‌ها بعدی هست

معانی کد های درخواست‌های HTTP :

GET = متد
/ = مسیر
HTTP/1.1 = نسخه کنترل
Host: developer.mozilla.org Accept-Language: fr =هدر

متد ها میتوانند ‌GET یا POST باشند که عملیاتی را تعریف می‌کند که کلاینت می‌خواهد اجرا کند

هدف URL یا مسیر مطلق پروتکل و پورت و دامنه است و بر اساس کانتکست درخواست مشخص می‌شود قالب‌بندی این هدف درخواست بر اساس متدهای مختلف HTTP متفاوت است

نسخه پروتکل HTTP

هدر های اختیاری که اطلاعات اضافی را به سرورها انتقال می‌دهند

معانی کد های پاسخ‌ های HTTP :‌

HTTP/1.1 = نسخه کنترل
200 = کد وضعیت
OK = پیام وضعیت
Date: Sat, 09 Oct 2010 14:28:02 GMT Server: Apache Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT ETag: "51142bc1-7449-479b075b2891b" Accept-Ranges: bytes Content-Length: 29769 Content-Type: text/html = هدر

نسخه پروتکل HTTP که استفاده شده است

کد وضعیت (انگلیسی : Status Code) که نشان می‌دهد آیا درخواست موفق بوده یا نه و دلیل آن چیست

یک پیام وضعیت که توضیح کوتاه غیر قابل استناد در مورد کد وضعیت است

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

API های مبتنی بر HTTP

پراستفاده‌ترین API مبتنی بر HTTP یک API به نام XMLHttpRequest است که می‌تواند برای مبادله داده‌ ها بین یک کلاینت و سرور استفاده شود Fetch API جدید و همین قابلیت‌ها را با مجموعه امکانات قدرتمندتر عرضه می‌کند.

API دیگر رویدادهای ارسالی از سمت سرور هستند که یک سرویس یک‌طرفه هستند که به سرور امکان می‌دهند تا رویدادها را به کلاینت ارسال کند و از HTTP به عنوان یک سازوکار انتقالی بهره بگیرد. کلاینت با استفاده از اینترفیس EventSource یک اتصال باز کرده و دستگیره‌های رویداد را ایجاد می‌کند. مرورگر کلاینت به طور خودکار، پیام‌هایی را که روی استریم HTTP به اشیای مناسب Event می‌رسند، تبدیل می‌کند و آن‌ها را به دستگیره‌های رویدادی تحویل می‌دهد که برای آن نوع type رویداد ثبت شده‌اند و یا اگر دستگیره رویدادی برای آن نوع خاص تعیین نشده باشید، به دستگیره رویداد تحویل می‌دهد

مارو در شبکه های اجتماعی زیر دنبال کنید ??

یوتیوب

اینستاگرام

تلگرام

ساب ردیت

خب تا مقاله های دیگر خدانگهدار ??

مقاله های پیشنهاد شده
مفاهیم اصلی شبکه , آدرس آی پی چیست ؟ (IPv4 VS IPv6) , تهدید های امنیتی رایج در دنیای سایبری
پروتکل httphttpوب سایت طراحی
من امیرحسین سلطانی هستم من از بچگی به بازی های ویدیویی علاقه داشتم و اخیرا به برنامه نویسی و هک و امنیت در زمینه تست نفوذ وب و علاقه پیدا کردم. مایلم تجربیاتم را با شما دوستان عزیز به اشتراک بگذارم.
شاید از این پست‌ها خوشتان بیاید