لیست متدهای http

لیست متدهای http

در این نوشته از سری نوشته های آموزشی رایگان در وبسایت camelCase به بررسی لیست متدهای http می پردازیم.

با مقاله ی لیست متدهای http همراه ما باشید.

 

لیست متدهای http

لیست متدهای http
لیست متدهای http

به طور کلی متدهای http به 9 نوع تقسیم می شود:

  1. Get
  2. Put
  3. Patch
  4. Delete
  5. Post
  6. Head
  7. Options
  8. Connect
  9. Trace

 

متدCRUDمثال
PostCreateعمدتا یک رکورد در لیستی که درمنبعی مشخص است ایجاد میکند.
GetReadمعمولا برای دریافت و خواندن اطلاعات استفاده میشه .
PutUpdate/Replaceاین متد برای آپدیت کردن دیتا استفاده میشود.
PatchUpdate/Modifyاین متد نیز برای آپدیت استفاده میشود که تفاوتش با متد قبلی توضیح داده شده .
DeleteDeleteساده ترین متد برای حذف رکوردی خاص یا همه رکورد ها میباشد.

 

حالا این CRUD که اون بالا نوشتیم چی هست ؟!

به مجموعه عملیات ساختن یا ایجاد (Create)، خواندن (Read)، آپدیت یا بروزرسانی یک رکورد (Update) و حذف رکوردی یا رکورد هایی (Delete) می گوییم؛ البته این چهار عمل را CRUD نیز می گوییم.

نکته : متد های  Idempotent متد هایی هستند که اجرای درخواست های از این نوع هر چند مرتبه که انجام شود و نتیجه یکسانی دارد. اما متد های غیر Idempotent متد هایی هستند که اجرای آنها به دفعات باعث به وجود آمدن آنومالی و side effectهای متعددی خواهد شد.

 

متد  POST

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

این متد از نوع غیر Idempotent است و اجرای چندباره این نوع درخواست باعث بوجود آمدن رکورد های متعددی از پارامتر های تکراری خواهد بود.

امنیت داده ی ارسالی در درخواست نسبتا بالاست (به قول بچه های تست نفوذ و امنیت no system is safe)  و بازه انواع درخواست های ارسالی شامل:

  • رشته ها (داده های متنی)
  • داده های باینری (آپلود فایل)

تمامی دیتاهای ارسالی در بدنه درخواست قرار می گیرد.

 

مزایا و معایب متد Post
  • امنیت نسبتا بالاتری نسبت به متد Get دارد و اطلاعات ارسالی در Address bar مرورگر قابل مشاهده نیستند.
  • سرعت درخواست های post (به مقدار خیلی خیلی کمی) کمتر از درخواست های متد Get هستند.
  • محدودیت کمتری (هم به لحاظ نوع مقادیر ارسالی و هم به لحاظ طول url) نسبت به Get دارد.(در برخی منابع گفته شده است که طول محدودی برای url ندارد.)
  • هرگز در history مرورگر ذخیره نمی شود.
  • به هیچ وجه قابل cache شدن هم نیست.

 

متد GET

این متد از نوع Idempotent است. و اجرای چند باره این درخواست نتیجه یکسانی خواهد داشت.

این متد عمدتا برای خواندن اطلاعات از یک سورس مشخص استفاده می شود و فرمت response به صورت json/xml می باشد.

درخواست های از نوع متد get بدنه یا body ندارند چرا که عمدتا برای درخواست اطلاعات استفاده می شود.

گاهی برای فرمت کردن داده ای که از قبل json یا xml نیست هم از این متد استفاده می شود.

این متد پارامتر های ورودی را با فرمت زیر معمولا ارسال می کند؛ کد زیر query Params پیش فرض سرچ در cms وردپرس می باشد.

camelcase.ir/?s=Search-Term

رشته هایی که space در میان واژگان دارند از طریق ” کاراکتر – ” از هم جدا می شوند.

پارامتر ها با ? شروع میشوند و هر property میتواند value داشت باشد یا نداشته باشد.(بسته به برنامه نویسی سمت back-end)

مقادیر با & از هم جدا می شوند. به عنوان مثال:

camelcase.ir/?name=Amir&user-age=&user-id=1

در کد بالا name  و user-id هرکدام دارای مقداری هستند ولی user-age مقداری ندارد.

مزایا و معایب
  • برای ارسال اطلاعات مهم نظیر پسورد ها یا اطلاعات کارت های بانکی نمی توان(نباید) از این متد استفاده کرد چون تمام مقادیر ارسالی در هر درخواست در address bar مرورگر قابل مشاهده هستند.
  • داده ها می توانند bookmark بشوند (امکان به اشتراک گذاری لینک حاوی این query params وجود دارد)
  • متد get دارای محدودیت طول می باشد یعنی مقادیر بسیاری را نمی توان در هر request ارسال کرد (max length = 2048 chars in url).
  • عموما درخواست های از نوع Get قابل کش شدن هستند و توی لاگ سرور(عمدتا یک سری اسکریپت وجود دارد که هزاران رکورد از تمام اتفاقاتی که می افتد (سمت کاربر یا سمت سرور) لاگ می گیرند) هم ذخیره می شوند.
  • در درخواست های این نوع تنها کاراکتر های ASCII قابل ارسال هستند.

 

متد PUT

این متد از نوع Idempotent است. و اجرای چند باره ی این درخواست نتیجه یکسانی خواهد داشت.

ماهیت این متد در ظاهر برای آپدیت یک رکورد از اطلاعات استفاده می شود ولی در عمل به این صورت است که اول رکورد مورد نظر را پاک می کند و (در همان مکان) یک رکورد جدید با استفاده از پارامتر های ارسالی جدید ایجاد می کند که عملا دیتای ما Replace می شود.

حالا اینجا سوال این هست که اگر فیلد هایی که در سرور موجود است جایگزینی در ارسال درخواست put ما نداشته باشند چه اتفاقی برای آنها می افتد؟؟!

چون رکورد جاری حذف می شود و بعد داده ی ما replace می شود فیلد هایی که جایگزین جدیدی برای آنها تعریف نشده مقدار null خواهند گرفت. و عملا در صورت عدم در نظر گرفتن همه فیلد ها در درون درخواست مقداری از اطلاعات قبلی ما که نیازی به ویرایش یا آپدیت شدن نداشتند از بین می روند.

 

متد PATCH

این متد هم از نوع Idempotent است و و اجرای چند باره این درخواست نتیجه یکسانی خواهد داشت.

این متد هم مکانیزمی مشابه به متد put دارد ولی مزیتش نسبت به put این است که فیلد هایی که مقادیر  جایگزین در درخواست ارسالی برای آنها درنظر گرفته نمی شود از بین نمی روند.

در اصل فقط مقادیری که باید نغییر کنند تغییر می کنند.

مثلا اگر نیاز باشد پسورد یک کاربر عوض شود اگر از متد put استفاده می کردیم همه اطلاعات کاربری اون شخص اعم از ایمیل و نام کاربری از بین می رفتند.

ولی در متد Patch فقط پسورد عوض می شود و باقی فیلد ها مقادیرشان دست نخورده باقی می ماند.

 

 

متد DELETE

این متد برخلاف متد Post از نوع Idempotent است و  اجرای چند باره ی این درخواست نتیجه یکسانی خواهد داشت.

ساده ترین روش حذف فایل یا رکوردی خاص از یک منبع مشخص است.

ممکن است این requestها body داشته باشند.

Responseهای موفقیت آمیز هم ممکن است body داشته باشد.

این نوع درخواست ها در مرورگر cache نمی شوند.

عموما وقتی درخواستی موفقیت آمیز ارسال می شود Response ها با http message های متفاوتی ممکن است دریافت شوند.

برای مثال درخواست زیر فایلی به نام badfile.html رو از سرور حذف می کند.

DELETE /badFile.htm HTTP/1.1

User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)

Host: www.camelCase.ir

Accept-Language: en-us

Connection: Keep-Alive

و در پاسخ چنین چیزی دریافت می شود:

HTTP/1.1 200 OK

Date: Mon, 27 Jul 2019 12:28:53 GMT

Server: Apache/2.2.14 (Win32)

Content-type: text/html

Content-length: 30

Connection: Closed

که با توجه به message code 200 که به منزله ok است می گوید که این کار انجام شده است.

و اگر این درخواست body هم داشته باشد به شکل زیر می شود:

 

متد HEAD

این متد هم همانند متد get عمل می کند با این تفاوت که فقط head درخواست return می شود که این head شامل یک سری اطلاعات از پارامتر های ارسالی و … است.

Body درخواست return نمی شود؛ در عمل بیشتر برای چک کردن مقدار برگشتی هر Get Request  استفاده می شود.

 

متد OPTIONS

این متد عمدتا زمانی استفاده می شود که می خواهیم بدانیم چه متد هایی در وب سرور مد نظر ما پشتیبانی می شود که می توانیم url خاصی را به آنها بدهیم یا اینکه از کاراکتر  Astrisk (*) جلوی OPTIONS استفاده کنیم تا ببینیم در کل سرور چه متد هایی ساپورت می شود.

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

OPTIONS * HTTP/1.1

User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)

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

HTTP/1.1 200 OK

Date: Mon, 27 Jul 2019 12:28:53 GMT

Server: Apache/2.2.14 (Win32)

Allow: GET,HEAD,POST,OPTIONS,TRACE

Content-Type: httpd/unix-directory

اگر به سطر سوم دقت کنید تمام متد های پشتیبانی شده رو برای ما مشخص کرده .

 

دلایل نیاز به سرور اختصاصی

 

متد TRACE

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

حالا به چه صورت؟؟!

به این شکل که وقتی درخواستی از نوع TRACE برای سرور از سمت کلاینت ارسال می شود سرور برای کلاینت درخواستی که کلاینت فرستاده بود را مجدد می فرستد تا کلاینت بتواند Content درخواستی که ارسال کرده بوده را مشاهده کند.

مثال:

TRACE / HTTP/1.1

Host: www.camelcase.ir

User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)

و نتیجه ی برگشتی درصورت موفقیت آمیز بودن درخواست به شکل زیر خواهد بود.

HTTP/1.1 200 OK

Date: Mon, 27 Jul 2019 12:28:53 GMT

Server: Apache/2.2.14 (Win32)

Connection: close

Content-Type: message/http

Content-Length: 39 TRACE / HTTP/1.1

Host: www.camelcase.ir

User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)

 

متد CONNECT

با استفاده از این متد می شود یک اتصال یا connection بین کلاینت و وب سرور که در مثال ما Apache است را برقرار می کنیم:

برای مثال در درخواست زیر قرار است که به سرور فرضا camelcase درخواست کانکشن بدهیم:

CONNECT www.camelcase.ir HTTP/1.1

User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)

در صوررتی که این درخواست با موفقیت انجام بشه نتیجه Head به شکل زیر خواهد بود.

 HTTP/1.1 200 Connection established

Date: Mon, 27 Jul 2019 12:28:53 GMT

Server: Apache/2.2.14 (Win32)

 

 

بررسی اهمیت های HTTPS در سایت

 

 

نظرات خود را در ارتباط با مقاله ی لیست متدهای http برای ما بنویسید.

موفق باشید.

برای امتیاز به این نوشته کلیک کنید!
[کل: 2 میانگین: 5]
با دوستانتان به اشتراک بگذارید

دیدگاهتان را بنویسید

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

*

code