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

در اینجا دو چیز را باید در راستای پروتکل HTTP گفت. یکم آنکه HTTP همانند هر پروتکل دیگری که در TCP/IP کار می کنند، بر پایه دوتایی های شماره IP و شماره درگاه (Port) است که این دوتایی یک سوکت ارتباطی میان درخواست کننده و در خواست گیرنده را می سازند. بنابراین درخواست دهنده باید از شماره IP و شماره Port سرویس دهنده آگاه باشد.

دوم آنکه پروتکل HTTP همیشه پاسخی را به درخواست کننده می فرستد که این پاسخ دارای یک شماره است که از این شماره گونه پاسخ آشکار می شود. اگر سرویس دهنده پاسخ دلخواه درخاست کننده را بفرستد، پس پاسخ دهی موفقیت آمیز بوده و از این رو پاسخ دارای شماره کد ۲۰۰ است ولی اگر پاسخ یک خطا باشد، پس شماره کد چیزی جز شماره ۲۰۰ است. برای نمونه اگر نشانی درخواستی که درخواست کننده به سرور فرستاده است پیدا نشود، خطای Page Not Found با شماره کد ۴۰۴ فرستاده می شود.

  • کد وضعیت پاسخ ۲۰۰ به معنی فرستاده شدن پاسخ با موفقیت است.
  • کد وضعیت ۴۰۳ بدین معنی است که سرویس دهنده درخواست را گرفت و آگاه شد ولی از اجازه دادن (Authorize) به آن جلوگیری می کند.
  • کد وضعیت ۴۰۴ یعنی برگه یا منبع درخواست شده روی وب وجود ندارد. احتمالا آدرسی را فرستاده اید که برای سرور نا مشخص است. در ASP.NET MVC Core نشانی را فرستاده اید که الگویی مسیر (Route) برای تطابق با آن نیست.
  • کد وضعیت ۵۰۳ بدین معنی است که سرویس که در دسترس نیز زیرا شاید سرویس دهنده یا سرور HTTP خاموش باشد.
  • کد وضعیت ۵۰۵ بدین معنی است که سرویس دهنده یا سرور HTTP نمی تواند پروتکل HTTP ای که با آن درخواست فرستاده شده است را داره کند.

متد GET در HTTP

GET یکی از متدهای فرستادن درخواست HTTP از سوی درخواست کننده است که بیشتر از راه نشانی URL به سرور فرستاده شود. این متد تنها برای دریافت (get) داده ها به کار می رود. بنابراین با این متد تنها می توان داده ها را با درخواستی از نشانی URL بخوانیم و نمی توانیم تغییر یا تاثیری بر داده ها داشته باشیم.

متد  POST در HTTP

POST متدی است که برای فرستادن داده ها به یک سرور به کار می رود. بیشتر به کمک فرم های اچ تی ام ال و متد POST داده ها را به سرور می فرستیم. بنابراین در به کارگیری فرم های اچ تی ام ال در هر زبانی مانند پی اچ پی یا سی شارپ و ASP.NET، باید ویژگی method فرم برابر با مقدار post باشد.

ولی چرا نباید متد GET را برای فرم ها به کار ببریم؟ زیرا که داده های فرستاده شده لو می روند. گفتیم که GET درخواست را به کمک نشانی URL می فرستد، پس اگر شما ویژگی method تگ form را برابر با get بگذازید، پس داده های فرستاده شده نخست در نشانی URL به گونه رشته های کوئری (Query String) نشان داده می شوند و سپس درخواست با این نشانی URL به سرور می رود. بنابراین اگر داده های مهمی مانند پسورد را از فرمی فرستاده باشید که مقدار ویژگی method آن برابر با get باشد، پس پسورد در نشانی URL نشان داده می شود.

متد PUT و DELETE در HTTP

PUT برای بروز رسانی داده ها به کار می رود به گونه ای که داده های تازه فرستاده شده با درخواست PUT با داده های کنونی جایگزین می شوند. در برابر PUT و POST که هر دو داده هایی را به سرور می فرستند، متد DELETE برای پاک کردن و حذف داده به کار می رود. بنابراین می توانیم بگوییم که GET برای خواندن و POST برای ساخت و PUT برای بروز رسانی و DELETE نیز برای حذف داده ها به کار می روند.

پیام های HTTP

پیام های HTTP داده هایی هستند که میان سرور و کلاینت رد و بدل می شوند. در پروتکل HTTP دو دسته پیام داریم، یکی پیغام های درخواست از سوی کلاینت و دیگری پیغام های پاسخ از سوی سرور است. پیغام های HTTP، پیغام های متنی در چندین بَند (خط) هستند که کدگذاری اسکی را به کار می برند. برنامه نویس ها و مدیران وب به ندرت با این پیغام ها کار می کنند ولی نرم افزاها، مرورگرهای وب، برنامه های پراکسی، سرورهای HTTP بسیار و بسیار وابسته و در حال کار با این پیغام ها هستند.

شکل بالا پیغام های درخواست و پاسخ و درون مایه هر یک را نشان داده که در ادامه درباره آنها خواهم گفت. هر پیام دارای سه بخش به نام Start Line که تک خط است، Header که چندین خط است و هر خط به گونه یک دوتایی از Key: Value است که هر مقدار برای کلید پس از کاراکتر : نوشته می شود. سپس تنه یا بدنه یا Body پیغام است.

پیام های درخواست در HTTP

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

سپس  بخش Header یا سرآیند پیغام است که با نام HOST یا میزبانی که درخواست را فرستاده نشان داده آغاز می شود. برای نمونه 127.0.0.1:8000 یا localhost:8000 یعنی سرور HTTP برای همین ماشین خودتان است. سپس User Agent یا برنامه ای که کلاینت با آن درخواست فرستاده است را نشان می دهد. برای نمونه در شکل بالا User Agent مرورگر موزیلا فایرفاکس است ولی می تواند مرورگرهای دیگر نیز باشد. نسخه و سیستم عامل نیز از User Agent مشخص می شود که درخواست را به سرور فرستاده است. بنابراین با خواندن پیغام پرخواست در سرور و برنامه هایی مانند پی اچ پی و ASP.NET می توانیم نشانی یا نام دامنه کلاینت و مرورگر و سیستم عامل آن را بدانیم.

سپس داده های دیگر مانند Accept-Language نشان داده می شود که در شکل بالا برابر با en-US به طور کلی زبان هایی که کلاینت آنها را می فهمد در درخواست به سرور فرستاده می شوند. Content-Type گونه یا نوع منبع درخواستی مانن یک برگه html یا یک تصویر را نشان می دهد. برای نمونه اگر درخواست برای تصویر باشد، نوع می تواند برای نمونه یکی از image/png یا image/jpg باشد. Content-Length اندازه بدنه پیغام (Message body) را نشان می دهد که شماره معتبر باید بیشتر از صفر باشد.

واپسین بخش از پیغام، بخش بدنه یا تنه یا Body پیغام است که اجباری نیست و شاید در پیغام هایی نباشد. برای نمونه درخواستی مانند GET و DELETE چیزی به سرور نمی فرستند بلکه برای نمونه GET تنها از سرور داده می خواهد ولی درخواستی مانند POST باید داده به سرور بفرستد.

پیام های پاسخ در HTTP

پیام های درخواست از سرور به کلاینت فرستاده می شوند و در برگیرنده یک پاسخ به کلاینت هستند. بَند (خط) یکم آن نسخه پروتکل HTTP که روی سرور است را نشان می دهد و در همین بند پیغام فرستاده شده نیز قرار می گیرند. برای نمونه در شکل سمت راست بالا کد وضیعت ۴۰۳ به همراه پیغام Forbidden نشان داده شده است. اگر پاسخ موفقیت آمیز بودن باشد، یعنی منبع در دسترس بوده و همچنین درخواست کلاینت میز مجاز بوده پس کد وضعیت ۲۰۰ خواهد بود ولی اگر منبع درخواستی پیدا نشود، پس کد وضعیت ۴۰۴ است.

بخش سرآیند نیز در برگیرنده چندین خط است که در هر یک دوتایی ها هستند. Server نام سرویس دهنده HTTP مانند Apache یا IIS را بر روی سرور نشان می دهد. content-Type نیز محتوای فایل برگشتی را نشان می دهد. برای نمونه شما درخواست یک برگه را با نشانی URL می کنید، پس text/html خواهد بود. Date زمان آماده شدن پیغام پاسخ را نشان می دهد. بخش پایانی نیز بدنه پیغام است که حاوی منبع درخواستی است. برای نمونه در شکل بالا محتوای برگشتی text/html است، پس بدنه نیز دربرگیرنده کدهای اچ تی ام ال صفحه وب است.