زیر و بم پروتکل HTTP

کلیات

HTTP، مخفف شده عبارت (HyperText Transfer Protocol) می‌باشد و کاربرد اصلی این قرارداد در سیستم‌های توزیع شده است. این قرارداد استفاده‌های گوناگونی را در علوم رایانه دارد اما باید گفت بیشترین استفاده از آن در بستر وب گسترده جهانی (World Wide Web) است که برای اولین بار توسط آقای تیم برنز لی، دانشمند علوم کامپیوتر، پیشنهاد شد. HTTP در واقع شیوه‌ای برای ارتباط، دریافت و ارسال داده‌ها بین سرویس گیرنده و سرویس دهنده است و به همین دلیل در دسته‌ی مدل‌های Client – Server قرار می‌گیرد؛ این قرارداد در لایه کاربرد یا Application قرار گرفته و از طریق لایه انتقال قابل اعتماد و امنی همچون TCP/IP پلی را بین سرویس‌دهنده و سرویس‌گیرنده برقرار می‌نماید. لازم به ذکر است که وظیفه تامین امنیت داده‌ها تماما بر عهده لایه انتقال قرار دارد.

قرارداد HTTP برای اولین بار در سال ۱۹۹۱ با نسخه ۰٫۹ منتشر شده و آخرین بروزرسانی آن نیز در سال ۱۹۹۹ و در قالب نسخه ۱٫۱ می‌باشد.

http
http

ساختار ارتباطی

 اگر بخواهیم مختصری از نحوه ارتباط در این قرارداد را بیان کنیم، باید گفت که HTTP از روش دست تکانی یا همان Hand Shaking استفاده نموده و آغازگر این ارتباط نیز سرویس‌گیرنده می‌باشد، بصورت کلی ارتباط با ارسال درخواست یا Request و دریافت پاسخ Response ادامه می‌یابد؛ به عنوان مثال زمانی که کاربر یک صفحه را از طریق مرورگر درخواست می‌نماید در واقع یک HTTP Request را به سرویس‌دهنده آن ارسال نموده و صفحه‌ای را که مشاهده می‌نماید همانHTTP Response است.

انواع درخواست‌ها

HTTP روش‌های گوناگونانی را برای انتقال داده در نظر گرفته است که به هر کدام به اصطلاح یک Request Method گفته می‌شود و به شرح ذیل می‌باشند؛ در نسخه‌های ابتدایی این قرارداد فقط سه روش GET، POST و HEAD موجود بوده است. لازم به ذکر است که سرویس دهندگان وب بایستی حداقل دو روش GET و HEAD را فراهم نمایند.

  • GET: در این روش سرویس‌گیرنده درخواست دریافت یک منبع (فایل یا سند) را ارسال می‌نماید، و معمولا نباید تاثیری را برروی داده‌ها بگذارد. معمولا در این روش از URL استفاده می‌شود و بدنه درخواست خالی می‌باشد.
  • HEAD: این روش همانند روش GET عمل می‌نماید با این تفاوت که تنها بخشی از اطلاعات یک منبع را درخواست نموده و به کل منبع نیازی ندارد. از این روش معمولا برای بررسی تغییرات منبع استفاده می‌شود.
  • POST: در این روش سرویس‌گیرنده بسته‌های اطلاعاتی را با استفاده از بدنه HTTP به سرویس‌دهنده ارسال می‌کند؛ و معمولا برای این امر از URL استفاده نمی‌شود.
  • PUT: در این روش بسته‌های اطلاعاتی با استفاده از بدنه درخواست جهت جایگزین شدن با منبع از پیش ذخیره شده استفاده می‌شود؛ معمولا از کاربردهای این روش بروزرسانی اطلاعات می‌باشد که در آن از بدنه درخواست و هم URL استفاده می‌شود.
  • DELETE: در این روش سرویس دهنده معمولا با استفاده از URL درخواست حذف یک منبع را ارسال می‌کند.
  • TRACE: در این روش سرویس دهنده اطلاعات دریافتی را دقیقا به همان صورت به سرویس‌گیرنده باز می‌گرداند؛ از این روش معمولا برای بررسی تغییرات واسط‌های شبکه و اشکال زدایی استفاده می‌شود.
  • CONNECT: از این روش برای استفاده از قرارداد امن HTTPS استفاده می‌شود.
  • OPPTIONS: این روش برای توصیف گزینه‌های ارتباطی برای منابع هدف مورد استفاده است و در آن از بدنه درخواست استفاده می‌گردد.

کدهای وضعیت

از نسخه ۱٫۰ قرارداد HTTP، کدهای وضعیت به آن افزوده شدند؛ این کدها در هنگام پاسخ یک درخواست وضعیت پاسخ را مشخص می‌نمایند و کاربر می‌تواند از طریق آن‌ها تصمیم‌های مختلفی را اتخاذ نماید. البته باید گفت از روش کدهای وضعیت در پروتکل‌های مختلف شبکه استفاده می‌شود.

به طور کلی در HTTP کدهای وضعیتی به پنج دسته کلی تقسیم می‌شوند:

کدهای ۱XX: این دسته از کدها که بازه بین عدد ۱۰۰ تا ۱۹۹ را دارا هستند، پیام‌های اطلاعاتی و درخواست‌های کلی را شامل می‌شوند.

کدهای ۲XX: این دسته از کدها که بازه بین عدد ۲۰۰ تا ۲۹۹ را دارا هستند، پیام‌های موفقیت آمیز را منتقل می‌نمایند. به عنوان مثال:

  • کد ۲۰۰: تراکنش با موفقین انجام شد.
  • کد ۲۰۱: درخواست POST با موفقیت انجام شد.

کدهای ۳XX: این دسته ازکدها که در بازه بین عدد ۳۰۰ تا ۳۹۹ را دارا هستند، که معمولا برای راهنمایی مجدد یا تغییر مسیر و … استفاده می‌شود.

کدهای ۴XX: این دسته از کدها که بازه بین عدد ۴۰۰ تا ۴۹۹ را دارا هستند، و بروز خطا از طرف سرویس‌گیرنده را شامل می‌شوند. به عنوان مثال:

  • کد ۴۰۰: درخواست نامناسب از جانب سرویس گیرنده.
  • کد ۴۰۴: منبع درخواستی یافت نشد.

کدهای ۵XX: این دسته ازکدها که بازه بین عدد ۵۰۰ تا ۵۹۹ را دارا هستند، و بروز خطا از جانب سرویس‌دهنده را شامل می‌شوند. به عنوان مثال:

  • کد ۵۰۱: متد استفاده شده، پیاده‌سازی نشده است.

لازم به ذکر است که پیام‌های مربوط به هر کد وضعیت به صورت پیشنهادی بوده و در صورت نیاز می‌توان متن پیام‌ها را تغییر داد. کاربر عامل می‌تواند از متن پیام‌ها جهت نمایش به کاربر بهره ببرد.

درخواست HTTP

درخواست‌های HTTP شامل دو بخش سرآیند یا Header و بدنه یا Body می‌باشند؛ که به طور کلی در سرآیند اطلاعات مربوط ارتباط همچون روش اتصال، تاریخ، طول بدنه و … قرار گرفته و در بدنه آن نیز داده‌های ارسالی قرار داده می‌شوند؛ البته ممکن است که در برخی درخواست‌ها قسمت بدنه خالی باشد. معمولا قالب محتوای بدنه درخواست بصورت XML و JSON می‌باشد.

همان‌گونه که پیش‌تر گفته شد در این قرارداد سرویس‌گیرنده درخواست یا همان HTTP Request را به سمت سرویس‌دهنده ارسال نموده و سپس پاسخ سرویس‌دهنده یا همان HTTP Response را دریافت می‌نماید.

درخواست سرویس‌گیرنده

  1. قسمت سرآیند

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

روش درخواست: در خط اول سرآیند نوع روش درخواست بیان می‌شود، در ادامه خط به آدرس منبع اشاره می‌شود و پس از آن نسخه پروتکل ذکر می‌گردد؛ به طور مثال:

GET  /index.php  HTTP/1.1

در مثال بالا روش ارتباطی بصورت GET و منبع آن /index.php و نسخه ۱٫۱ قرارداد HTTP استفاده شده است. لازم به ذکر است که در صورت اینکه در قسمت منبع / قرار داده شود، root وبسایت درخواست داده می‌شود.

Host: معمولا در خط دوم سرآیند آدرس میزبان قرار داده می‌شود، برای این امر دستور بصورت زیر نوشته می‌شود:

Host:  batisapp.ir:80

نوشته شدن پورت مربوطه بصورت اختیاری است، یعنی می‌توان در دستور بالا بخش :۸۰ را ننویسیم.

نکته: از این پس ترتیب نوشته شدن اطلاعات اهمیتی ندارد.

Accept: سرویس‌گیرنده به سرویس‌دهنده وب فرمت اطلاعاتی را که می‌تواند دریافت نماید را اعلام می‌نماید. به طور مثال در مثال زیر فرمت قابل دریافت را HTML بیان می‌کند.

Accept: text/Html

فرمت‌های دیگری از جمله application/xml و یا application/json نیز بسیار پرکاربرد هستند.

نکته: در این فیلد می‌توان فرمت‌های گوناگون را با استفاده از علامت , معرفی نمود؛ مثلا:

Accept: application/json, application/xml

Content-Type: این بخش مشخص کننده‌ی این است که داده‌های ارسالی که در بخش بدنه درخواست قرار دارند دارای چه فرمتی هستند. به طور مثال

Content-Type: application/json

Content-Length: این قسمت مشخص کننده طول کاراکترهای ارسالی موجود در بدنه می‌باشد.

Content-Length: 23

یعنی تعداد کاراکترهای موجود در بدنه درخواست ۲۳ کاراکتر است.

User-Agent: بخش کاربر عامل معمولا دارای اطلاعات ارسال کننده درخواست است؛ به عنوان مثال:

User-Agent: Mozilla/5.0

در مثال بالا نوع مرورگر معرفی شده است.

در توضیحات بالا برخی از مهمترین بخش‌های سرآیند ارسالی توسط سرویس‌گیرنده شرح داده شد، اما باید گفت بخش دیگری همچون Authorization برای نحوه مجوز، Keep-Alive برای مشخص کردن مدت زمان فعال بودن نشست، Cookie و … وجود دارد که از توضیح آن‌ها صرف نظر می‌کنیم.

  1. قسمت بدنه

در بخش بدنه درخواست با توجه به نوع تعیین شده آن در بخش Content-Type می‌توان در صورت نیاز داده‌ای را به سمت سرویس‌دهنده ارسال نمود؛ به طور مثال:

{“SiteName”:”BatisApp”}

نکته: بدنه‌ی یک درخواست در قسمت زیرین سرآیند و با فاصله توسط یک خط سفید آغاز می‌گردد.

مثالی از یک درخواست سرویس‌گیرنده:

Post / HTTP/1.1

Host: batisapp.ir

Accept: application/json, text/html

Content-Type: application/json

User-Agent: Mozilla/5.0

Content-Length:23

{“SiteName”:”BatisApp”}

پاسخ سرویس‌دهنده

  1. سرآیند پاسخ

در بخش سرآیند بخش‌های متفاوتی می‌تواند وجود داشته باشد، از مهمترین آن‌ها می‌توان به گزینه‌های زیر اشاره کرد:

Status Line: در خط اول پاسخ ارسالی، وضعیت پاسخ با استفاده از کدهای وضعیت نمایش داده می‌شود؛ به طور مثال:

HTTP/1.1  ۲۰۰  OK

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

Cache-Control: در این بخش نحوه مدیریت Cache بیان می‌گردد.

Content-Type: این بخش مشخص کننده‌ی این است که داده‌های ارسالی که در بخش بدنه پاسخ قرار دارند دارای چه فرمتی هستند.

Server: نوع سرویس‌دهنده و یا نرم‌افزار سرویس‌دهنده را مشخص می‌نماید.

Date: تاریخ ارسال پاسخ را نشان می‌دهد.

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

  1. بدنه پاسخ

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

مثالی از پاسخ سرویس‌دهنده:

HTTP/1.1 200 OK

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: no-cache

Content-Type: text/html; charset=UTF-8

Expires: Thu, 19 Nov 1981 08:52:00 GMT

Server: Microsoft-IIS/8.5

Date: Thu, 02 Mar 2017 14:07:15 GMT

Content-Length: 33311

<!DOCTYPE html>

<html dir=”rtl” lang=”fa-IR” prefix=”og: http://batisapp.ir“>

<head>

<meta charset=”UTF-8″>

<meta name=”viewport” content=”width=device-width, initial-scale=1″>

<title>گروه برنامه نویسی باتیس -</title>

.

.

.

به امید این که مطلب بالا مفید واقع شده باشد.

نویسنده مطلب: یاشار عرفانیان

4 دیدگاه در “زیر و بم پروتکل HTTP

  • سعد ابن ابی وقاص

    (اسفند ۱۵, ۱۳۹۵ - ۶:۴۳ ب٫ظ)

    السلام علیکم
    این مطلب مفید واقع شده است !
    فی امان ا لله

  • سعید احمدی

    (اسفند ۱۹, ۱۳۹۵ - ۱۰:۱۴ ب٫ظ)

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

    • یاشار عرفانیان

      (فروردین ۱۰, ۱۳۹۶ - ۰:۳۸ ق٫ظ)

      متشکر از لطف شما.

  • D4N005H

    (فروردین ۸, ۱۳۹۶ - ۱۱:۵۳ ب٫ظ)

    عالی! خداقوت.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

19 − = 9