amed

آشنایی با پروتکل HTTP

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

پروتکل های اینترنتی به عنوان پرکاربردترین و مهمترین استاندارد برای تبادل اطلاعات در شبکه های اینترنتی شناخته شده‌اند.پروتکل HTTP یکی از استانداردهای پرکاربرد تعریف شده برای شبکه های اینترنتی می‌باشدو پروتکلی برای انتقال اطلاعات شبکه های اینترنتی ست . این پروتکل برای دسترسی داده ها در دنیای جهانی وب World Wide Web(www) بکار گرفته می‌شود.

HTTP مخفف HyperText Trasfer Protocol می‌باشدکه به معنای پروتکلی برای انتقال ابرمتن هاست که می‌تواند به صورت نوشته ساده (Plain Text) ، ابرمتن (HyperText) ، صدا (Audio)  ، ویدئو(Video) باشد.این پروتکل به این علت پروتکل انتقال فرامتنی خوانده می‌شود که می‌تواند به ما امکان انتقال داده در محیط های فرامتنی را بدهد.

برای اینکه بهتر متوجه انتقال فرامتن یا HyperText  شویم شکل زیر که از صفحه اصلی سایت amedco.ir  هست و یک فرامتن را به ما نشان میدهد.شما می‌توانید با کلیک راست روی صفحه سایت و انتخاب گزینه Inspect  یک فرامتن یا HyperText  مشاهدکنید.

amed

پروتکل HTTP چگونه عمل می‌کند؟

پروتکل HTTP از Handshaking به منظور ارسال و دریافت اطلاعات استفاده می‌کند. در این روش برای شروع و پایان عملیات تبادل اطلاعات بین سرور و کلاینت، چندین درخواست و پاسخ رد و بدل می‌شود. تصور کنید که کلاینت (مرورگر) فردی است که قصد دارد اطلاعات مربوط به یک سایت را دریافت کند.

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

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

لازم به ذکر است که در این فرآیند از پروتکل های TCP/IP به منظور افزایش امنیت و تضمین ارسال داده‌ها استفاده می‌شود. ارتباط بین کلاینت و سرور در این پروتکل معمولا از طریق پورت 80 انجام می‌شود. همچنین به مجموعه اطلاعات تبادل شده بین دو کلاینت و سرور در این فرآیند، نشست یا Session گفته می‌شود.

این درخواست ها یا Request ها و پاسخ به آنها یا Response انواع مختلفی دارند که در ادامه مطلب به بررسی هریک میپردازیم.

انواع HTTP Request

 

برای برقراری ارتباط بین سرور و کاربر لازم تا  درخواست خود را در قالب پیام های مشخصی برای سرور ارسال شود که رایج ترین و پرکاربرد ترین این درخواست ها عبارتنداز:

  1.  GET Methodاین متد زمانی استفاده می‌شود که Client برای دریافت یا دسترسی به یک Resource، درخواست‌ را ارسال می‌کند. استفاده از این نوع درخواست، فقط برای گرفتن منابع است و نباید تاثیر دیگری داشته باشد (برای نمونه نباید باعث ایجاد تغییر در فایلی در سمت سرور شود).

  2. HEAD Method:  این نوع درخواست دقیقا مانند متد قبل است با این تفاوت که منبع مورد نظر برای کاربر استفاده نمی‌شود اما کاربر می‌تواند پاسخ سرور به یک درخواست GET را ببیند. برای نمونه شرایطی را فرض کنید که کاربر قرار است براساس این‌که آیا به یک Resource خاص دسترسی دارد یا نه، تصمیمی بگیرد. در این حالت به‌جای استفاده از متد GET و دریافت حجمی از داده‌ها که الزاما نیازی به آن‌ها ندارد، از این متد استفاده می‌کند و پاسخ مورد نظر خود را دریافت می‌کند.
  3. POST Method:  از این متد برای ارسال یک داده به وب سرور استفاده می‌شود. مانند زمانی که کاربر تصویری را برای پروفایل خود آپلود می‌کند. هم‌چنین هنگامی که کاربر قصد دارد داده‌ای را در یک زیرشاخه از URLای خاص قرار دهد نیز از این متد استفاده می‌شود. مثلا فرض کنید که قرار است یک وبلاگ نویس، متنی را در دسته‌بندی موضوعات شخصی پست کند. در این حالت، با ارسال متن خود و هم‌چنین URLای که به این بخش اشاره می‌کند، از سرور می‌خواهد تا این متن را در این شاخه قرار بدهد.
  4. PUT Methodاز این متد برای به‌روز کردن یا قرار دادن یک جایگزین برای یک منبع استفاده می‌شود. زمانی که کاربر URL مورد نظر خود را همراه یک منبع برای سرور ارسال می‌کند، با فرض Valid بودن درخواست کاربر، اگر منبعی در URL داده شده وجود داشته باشد، منبع ارسالی کاربر جایگزین آن می‌شود. در غیر این صورت، سرور این منبع را به عنوان منبعی جدید ایجاد می‌کند و فایل ارسالی کاربر را در آن قرار می‌دهد.
  5. DELETE Method:  همان‌طور که از نام این متد مشخص است، اگر درخواست ارسالی با این متد معتبر باشد، منبع مورد نظر کاربر حذف می‌شود.

تمام Web Server‌ها باید دست کم از دو متد اول پشتیبانی کنند. نکته‌ی مهم آن است که نام متد‌ها، نسبت به بزرگ یا کوچک بودن حروف حساس هستند و برای نمونه نمی‌توان از کلمه‌ی post به جای POST استفاده کرد.

انواع Response Server ها

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

  1.  Informational Responses: این کد‌ها نشان‌دهنده‌ی آن هستند که درخواست دریافت شده است و سرور می‌تواند آن را تشخیص دهد. اما هیچ اطلاعاتی درباره‌ی نتیجه‌ی Request ارسال شده با خود ندارند. عدد مشخص کننده‌ی این پاسخ‌ ها، عدد ۱ است و کد‌های ارسال شده به صورت  1xx هستند.
  2. Successful Responses: ارسال این کد از سمت سرور به این معنی است که درخواست کاربر با موفقیت انجام شده است. برای نمونه، این درخواست می‌تواند برای دریافت یا ایجاد یک Resource باشد. کد‌های مشخص کننده‌ی این پیام به‌شکل  2xx هستند. معروف‌ترین این کد‌ها، کد 200 است که نشان می‌دهد درخواست کاربر کاملا با موفقیت انجام شده است و اگر درخواست برای دسترسی به منبعی باشد، منبع مورد نظر هم برای کاربر ارسال می‌شود.
  3. – Redirects: گاهی اتفاق می‌افتد که درخواست ارسال شده از سمت Client درست است و منبع خواسته شده هم وجود دارد، ولی نام، مسیر یا مشخصاتی از آن تغییر کرده است. در این هنگام سرور با ارسال این کد و در ادامه با ارسال شکل تصحیح شده‌ی نام یا مسیر، به Client می‌گوید که چگونه این درخواست را بازنویسی کند تا به منبع مورد نظر دست پیدا کند. کد این پیام به‌شکل  3xx است.
  4. Client Error Responses: هر خطایی در ارسال درخواست از سمت Client وجود داشته باشد، با این کد مشخص می‌شود. نمونه‌ای از این خطا‌ها، زمانی است که کاربر درخواست اشتباهی ارسال می‌کند (برای نمونه در request، خطای syntax وجود دارد) یا کاربر منبعی را درخواست می‌کند که وجود ندارد. یا برای نمونه، زمانی که کاربر فایل یا منبعی را درخواست می‌کند که اجازه‌ی دسترسی به آن‌ را ندارد (به اصطلاح،Unauthorized  است). کد‌های این خطا به‌شکل  4xx هستند و پرکاربرد‌ترین آن‌ها، کد‌های ۴۰۰، ۴۰۳ و ۴۰۴ هستند. کد ۴۰۰ بیانگر پیام Bad Request، کد ۴۰۳ پیام Forbidden و کد 404 پیام Not Found است.
  5. Server Error Responses: هر زمان سرور در بررسی درخواست ارسال شده یا پاسخ دادن به آن دچار مشکل می‌شود، این خطا را ارسال می‌کند. مثلن فرض کنید Client برای ارسال Request، از روشی استفاده می‌کند که سرور آن را پشتیبانی نمی‌کند. سرور بعد از دریافت Request، با درخواستی ناشناخته مواجه شده است (دقت کنید که این نمونه با نمونه‌های بیان شده در مورد ۴ تفاوت دارد. در مورد ۴، کاربر درخواست اشتباهی ارسال کرده است اما در این مورد، درخواست کاربر درست اما سرور قادر به فهمیدن آن درخواست نیست). از دیگر زمان‌هایی که سرور این کد را ارسال می‌کند، زمانی است که Web Application پاسخ‌گو به این درخواست، برای ایجاد تغییرات Down است یا زمانی که درخواست‌های هم‌زمان زیادی برای سرور ارسال شده است و سرور برای مدتی نمی‌تواند به درخواست جدیدی پاسخ بدهد. این خطا‌ها با کد‌هایی به شکل 5xx ارسال می‌شوند.

ساختار Request و Response ها در پرتکل HTTP

فرمت پیامهای درخواست یا ریکوئست و جواب یا رسپانس در پروتکل HTTP شبیه به هم هستند. هر دو این پیام‌ها شامل اجزای زیر هستند.

 بدنه: یک پیام امکان دارد بعد از خطوط هدر شامل یک بدنه باشد. در این بخش اطلاعاتی مثل داده‌های وارد شده توسط کاربر، نتایج یک فرم و غیره ثبت و سپس به سرور ارسال می‌شود.

 یک خط خالی: پس از خطوط هدر یک خط خالی قرار می‌گیرد.

 خطوط هدر: خطوط هدر اطلاعات مورد نیاز برای درخواست و یا جواب را آماده می‌کند. هر هدر در یک خط جدا تعریف می‌شود و ساختار آنها به صورت KEY:VALUE می‌باشد. در این بخش اطلاعاتی مانند نام سرور، اطلاعات مربوط به بدنه و غیره ذکر می‌شود.

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

ورژن های پروتکل HTTP

HTTP/1 این ورژن به صورت گسترده در جهان وب استفاده می‌شود ، هر Request به صورت Chunk به وب سرور ارسال می‌شود و منتظر پاسخ می‌ماند به این رفت و برگشت Packet ، Round-Trip گفته می‌شود.وقتی تمامی Packet ها به درستی دریافت شوند وب سرور آن‌ها را پردازش می‌کند و متوجه محتوای Request می‌شود اگر در این بین یک Packet گم یا دچار مشکل شود وب سرور منتظر Packet  گمشده می‌ماند که به این عمل Head-Of-Line-Blocking گفته می‌شود .

در ورژن HTTP/2 دیتا به صورت Chunk شده ارسال نمی‌شود  و از تکنیکی به نام Multiplexing برای ارسال دیتا استفاده می‌شود که در این روش هدرها و دیتا فشرده و متوالی می‌شود و کل Request به صورت دو Frame کاملا مستقل ارسال می‌شود و چون کپسوله هستند مشکل گم شدن Packet ها رو ندارن کل فرآیندReqeust  و Response در یک Stream اتفاق می‌افتد در این حالت سرعت افزایش می‌یابد اما مشکل HTTP/2 این است که با ازدحام شبکه اگر در این بین یک Stream گم شود کل Request هم برای سرور غیرقابل شناسایی است این برخلاف HTTP/1 است که منتظر می‌ماند تا Packet گم شده دریافت شود.

هردو ورژن های HTTP/1  و HTTP/2  از پروتکل TCP استفاده می‌کنند.

ورژن HTTP/3  تازه معرفی شده است و حالت Preview دارد در این ورژن از پروتکل UDP استفاده می‌شود.

جهت مشاور، طراحی، تامین تجهیزات، پیاده سازی و پشتیبانی محصولات F5 BIG-IP  و F5 BIG-IQ با شرکت عامد تماس حاصل فرمایید.
فهرست