تفاوت GET و POST: دریافت اطلاعات مختلف از کاربران و ارسال این اطلاعات به سرورهای سایت، بخش مهمی از وظایف یک وب سایت میباشد. داده و اطلاعات ارزش بسیار زیادی دارند و در دنیای مدرن امروزی متخصصانی وجود دارند که شغل آنها کار با دادهها است. حالا سوال پیش میآید که سایتها چطور این دادهها را از کاربران میگیرند؟
مرورگر وب برای ارتباط با سرور از دو متد HTTP معروف با عناوین GET و POST استفاده میکند. این متدها برای ارسال اطلاعات از طرف کاربر به سرور استفاده میشوند و هر کدام مزایا و معایب خودشان را دارند. در ادامه به طور مفصل دربارهی تفاوت GET و POST صحبت خواهیم کرد. با وب سایت آموزش برنامه نویسی سون لرن همراه باشید.
HTTP چیست ؟
عبارت HTTP مخفف Hyper Text Transfer Protocol بوده و یک پروتکل برای مشخص کردن فرمت اطلاعات و ارسال آنها در شبکه است. علاوه بر آن، HTTP مشخص میکند که وب سرورها و مرورگرها در هنگام مواجه شدن با دستورات مختلف چه واکنشی نشان دهند. با مثال زیر، بهتر متوجه مفهوم HTTP خواهید شد.
زمانی که یک آدرس وب را در مرورگر خود وارد میکنید، در واقع یک درخواست HTTP به وب سرور میفرستید تا آن صفحه وب را واکشی کرده و به شما نشان دهد. دو مفهوم Request و Response یا درخواست/پاسخ در HTTP بسیار مهم هستند. به این شکل که کاربر درخواست (Request) خود را از طریق مرورگر به وب سرور میفرستد. در سرور، پردازش موردنظر روی این درخواست انجام شده و خروجی تولید شده دوباره از طریق پاسخ (Response) به مرورگر کاربر میگردد.
در ادامه با دو متد اول و تفاوت GET و POST بیشتر آشنا میشوید.
متد Get چیست؟
همهی ما روزانه از سایتهای زیادی بازدید میکنیم و فرمهای زیادی را در این سایتها پر میکنیم. فرمهای متداولی که در سایتها استفاده میشوند عبارتند از:
فرم تماس با ما
فرم ثبت نام یا ورود به سایت
فرم عضویت در خبرنامه
و... .
متد Get به طور پیش فرض برای ارسال اطلاعات فرمها به سرور استفاده میشود. این متد دادههای یک فرم را برای سرویس دهنده ارسال میکند، به این شکل که به انتهای URL یک "نام/مقدار" را اضافه کرده و پارامترها را به کمک query string به سرور میفرستد. احتمالا برایتان سوال پیش بیاید که Query String چیست؟ Query String قطعهی متنی است که پس از علامت سوال (؟) در URL میآید. به آدرس زیر دقت کنید:
?sitename =7Learn
راجع به زوج "نام/مقدار" همانطور که از اسم آن میتوانید متوجه شوید، بخش اول نشان دهنده نام مورد نظر ما و دومین بخش نشان دهنده مقدار مورد استفاده برای ذخیره سازی میباشد. زوج "نام/مقدار" به صورت خودکار مقادیر متناظر را از فرم دریافت میکند. یک فرم میتواند شامل textbox، checkbox یا موارد دیگر باشد، پس نام استفاده شده در متد GET همان نام کنترل استفاده شده در فرم بوده و محتویاتی که کاربر در کنترل مورد نظر وارد میکند، مقدار را مشخص میکند.
در مثال بالا بعد از ؟ زوج "نام/مقدار" با عنوان sitename =7Learn آمده که sitename نام مورد نظر ما و 7Learn مقدار مرتبط با آن است. مرورگر زمانی که میخواهد یک صفحه را برای سرویس دهنده ارسال کند، این اطلاعات را به صورت خودکار به انتهای URL اضافه میکند. پس در نهایت آدرس ما به شکل زیر نمایش داده میشود:
https://7learn.com/page.php?sitename=7Learn
به همراه یک URL میتوان بیشتر از یک زوج "مقدار/نام" را ارسال کرد. برای این کار باید هر زوج "مقدار/نام" را با علامت "&" (که به آن ampersand نیز گفته میشود) از یکدیگر جدا کنیم. در کد زیر از دو زوج sitename=7Learn و webmaster=Loghman استفاده کرده و این دو با "&" از هم جدا شده اند:
همانطور که کمی قبلتر اشاره کردیم، بخش اضافه شده به URL را Query String میگويند. مشاهده کردید که به کمک متد GET اطلاعات را به وب سرور خود ارسال کردیم، اما متد GET تنها روش ارسال داده بين سرويس گيرنده و سرويس دهنده نیست. برای ارسال اطلاعات میتوانیم از متد POST هم استفاده کنیم.
مزایا و معایب استفاده از متد GET
مزایا و معایب استفاده از متد GET عبارتند از:
از آنجایی که اطلاعات فرستاده شده با متد GET در URL آدرس صفحه نمایش داده میشوند، میتوانید صفحه را با مقادیر query string مورد نظر خود بوک مارک (Bookmark) کنید.
متد GET مناسب ارسال اطلاعات حساس و مهمی مثل نام کاربری، رمز عبور، اطلاعات کارت بانکی و... نیست، زیرا اطلاعات به طور کامل در query string آدرس صفحه قابل مشاهده است و اینکه در حافظه مرورگر کاربر به عنوان یک صفحه بازدید شده ذخیره میشود.
متد GET دیتا را در یک متغیر داخل محیط سرور ذخیره میکند؛ به همین دلیل طول URL محدود شده و در نتیجه کل داده ارسالی ما محدود میشود.
متد POST چیست؟
متد POST دادهها را به صورت یک پکیج و در ارتباطی جداگانه به سرور ارسال میکند. دادههایی که به کمک متد POST ارسال میشوند، در URL صفحه نمایش داده نمیشوند و از لحاظ امنیتی انتخاب بسیار مناسبی هستند.
مزایا و معایب استفاده از متد POST
مزایا و معایب استفاده از متد POST عبارتند از:
امنیت این روش ارسال اطلاعات بسیار بالا است و اطلاعاتی که کاربر تایپ میکند به هیچ عنوان در مرورگر قابل مشاهده نیست، علاوه بر آن، در گزارشات (Logs) سرور هم ذخیره نمیشوند.
از آنجایی که اطلاعات ارسال شدهی صفحه با متد POST در URL دیده نمیشوند، نمیتوان آن صفحه را در مرورگر Bookmark کرد.
در متد POST محدودیت بسیار بیشتری برای ارسال اطلاعات وجود دارد. به کمک POST میتوان دادههای متنی و باینری (آپلود فایل) را ارسال کرد.
ارسال مقدار متغیرها از یک صفحه به صفحه ای دیگر با روش POST در PHP
تمامی توسعه دهندگان وب سایت و به خصوص زبان PHP، با متدهای GET و POST سروکار دارند. پس در این بخش برای تفهیم بیشتر این دو متد، یک برنامهی ساده را در خصوص ارسال متغیر در PHP مثال میزنیم.
نمونههایی از متد GET و POST در PHP
فرض کنید که میخواهید یک رشته را با اینپوت فیلد گرفته و بعد از زدن دکمهی تایید، آن را در صفحهی جدیدی در قالب یک متن نمایش دهید. کد این برنامهی ارسال متغیر در PHP با استفاده از متد GET به صورت زیر است:
به عنوان یک نتیجه گیری، تفاوت GET و POST را در قالب یک جدول گردآوری کردیم:
متد GET
متد POST
پارامترهای GET در URL موجود است.
پارامترهای POST در بدنه گنجانده شده است. پس امنیت بالاتری دارد.
از متد GET اغلب برای واکشی اسناد استفاده میشود و از پارامترهای GET برای توصیف اینکه به دنبال کدام سند هستید، در چه صفحهای هستید و... استفاده میشود.
از متد POST اغلب برای بروزرسانی دادهها برای تغییر در سرور یا دادههای ذخیره شده در سرور استفاده میشود.
از آنجا که پارامترها در URL میآیند، حداکثر طول URL دارای محدودیت است.
هیچ محدودیتی در طول URL ندارد.
در اغلب موارد، هنگامی که شما یک درخواست ساده را با استفاده از متد GET ارسال میکنید، تراکنش بین ماشینها و سیستمها کمتر است.
با فراخوانی متد POST، اطلاعات ذخیره شده تغییر میکنند، پس تراکنش بین سیستمی پیچیدهتر میشود.
با فراخوانی پی در پی یک متد GET اطلاعات بازگشتی از سمت متد GET نباید تغییر کنند.
دادههای موجود در سرور را تغییر میدهد.
این متد تنها از نوع داده رشته (String) پشتیبانی میکند.
متد POST از انواع مختلف داده (بولین، عددی و...) در بدنهی خود پشتیبانی میکند.
نتایج به دست آمده از متد GET را میتوان بوکمارک کرد.
نتایج به دست آمده از متد POST را نمیتوان بوکمارک کرد.
درخواست GET اغلب قابل ذخیره شدن در حافظهی پنهان (کش شدن) است.
درخواست POST به سختی قابل کش شدن است.
پارامترهای متد GET در تاریخچهی مرورگر وب باقی میمانند.
پارامترهای POST در سابقهی مرورگر وب ذخیره نمیشوند.
دریافت و ارسال اطلاعات با متد GET در جاوا اسکریپت
جاوا اسکریپت دارای ماژولها و روشهای متنوعی برای ایجاد درخواستهای HTTP است. این ماژولها میتوانند برای ارسال یا دریافت اطلاعات از دادههای سمت سرور مورد استفاده قرار گیرند. برخی از ماژولهای کاربردی و محبوب بین توسعه دهندگان جاوا اسکریپت عبارتند از:
فناوری Ajax
متدهای jQuery (مانند $.ajax)
استفاده از fetch
کتابخانهی Axios
ماژول Angular HTTP Client (برای استفاده در انگولار)
برای تست بهتر، میتوانید از JSONPlaceholder استفاده کنید. JSONPlaceholder یک API آنلاین رایگان REST برای توسعه دهندگان است تا بتوانند دادههای تصادفی خود را با متدهای HTTP تست کنند. این API نتایج را در قالب JSON برمیگرداند.
قبل از ایجاد یک درخواست HTTP در Ajax، باید یک متغیر از نوع ()XMLHttpRequest بسازید. سپس آدرس یا URL موردنظر و روش HTTP را تعیین کنید (که در این مورد متد GET است). درنهایت، کافی است با استفاده از تابع open، یک درخواست را به همراه آدرس و نوع متد میسازید و برای ارسال درخواس، تابع send را فراخوانی کنید. برای نمونه، یک نمونه کد GET با استفاده از Ajax به شکل زیر است:
با استفاده از XMLHTTPRequest.onreadystatechange مقدار بازگشتی یا همان پاسخ متد GET، در کنسول چاپ میشود.
دریافت و ارسال اطلاعات با متد POST در جاوا اسکریپت
برای آشنایی بیشتر، یک نمونه از متد POST در جاوا اسکریپت را با استفاده از توابع jQuery به شکل زیر است:
const Url= 'https://isonplaseholder.typicode.con/postsr/' ;
const data={
name:"7learn",
id:1399
}
$('.btn').click(function(){
$.post(Url,data, function(data, status){
console.log('${data} and status is ${status}')
});
})
همانطور که در بالا میبینید، متد post$. روش دیگری برای ارسال اطلاعات به سرور است. این متد سه پارامتر (URL، دادههایی که میخواهید ارسال کنید و عملگر برگشتی) را به عنوان ورودی دریافت میکند و نتیجه را در کنسول چاپ میکند.
از متد GET یا POST استفاده کنیم؟
در این مطلب به بررسی نحوهی تفاوت GET و POST با یکدیگر پرداختیم. به عنوان یک برنامه نویس سرور یا بک اند (Back-End) این وظیفهی شما است که با توجه به شرایط برنامه، یک یا هر دو متد GET و POST را به کار بگیرید. اگر میخواهید دادههای حساس و شخصی مانند رمز عبور و حساب بانکی را ارسال کنید، بهترین انتخاب متد POST است. همچنین در شرایطی که لازم است اطلاعات URL به کاربر نشان داده شود استفاده از متد GET مفیدتر خواهد بود. پس هر دو متد کاربردی و مفید هستند و فقط باید در جای درست از آنها استفاده کنید. در آخر اگر سوال یا تجربهای راجع به متدهای GET و POST دارید آن را در بخش نظرات با ما و کاربران سون لرن به اشتراک بگذارید.
۱۶ دیدگاه
Mehran۱۱ شهریور ۱۴۰۲، ۱۲:۵۸
خوب بود سپاس
۱۷ آبان ۱۴۰۱، ۱۹:۰۶
سلام خدمت دوستان
ببخشید من یه سوال داشتم ، چطور وقتی در api با متد post فراخوانی میکنم ، بتونم pai رو publish کنم؟؟
نازنین کریمی مقدم۱۸ آبان ۱۴۰۱، ۰۶:۳۰
درود
شما باید مقدار بازگشتی رو در قالب یک آبجکت برگردونید.
اینکه چجوری api رو پابلیش کنید بستگی به این داره که کجا میخواد پابلیش شه. برای مثال در پستمن به <a href="https://support.smartbear.com/swaggerhub/docs/apis/publishing-api.html" target="_blank" rel="noopener nofollow ugc">این صورت </a>انجام میشه.
۲۴ اسفند ۱۴۰۰، ۲۱:۵۰
زیاد از نظرم دلنشین نبود و توضیحات هم کامل نبود و همش ما را دنبال سایتهای دیگر میفرستادند! :(
در کل کار امد نبود! فکر میکردم که بهتذ باشه و............
۲۹ اسفند ۱۴۰۱، ۱۰:۳۳
بنده خدا شما فکر میکنی پول دادید مگه، به این قشنگی توضیح داد بنده خدا
۲۰ اسفند ۱۴۰۰، ۱۲:۵۳
خیلی مختصر و مفید و کامل توضیح داده شد با نمونه کد
خیلییییییی ممنون
Ehsan Rostami۰۲ اسفند ۱۴۰۰، ۱۵:۲۹
nice
عرفان۰۶ اردیبهشت ۱۳۹۹، ۲۱:۲۹
خیییلی کامل و دقیق بود ممنون
سید محمدعلی۲۸ فروردین ۱۳۹۹، ۱۱:۰۴
مطلب خیلی خوبی بود.
سید محمدعلی۲۸ فروردین ۱۳۹۹، ۱۱:۰۴
"در متد POST محدودیت بسیار بیشتری برای ارسال اطلاعات وجود دارد، به کمک POST میتوان دادههای متنی و 'بابنری' (آپلود فایل) ارسال کرد"
به نظرم باینری درست بود.
Saturn۱۷ اسفند ۱۳۹۸، ۰۶:۱۹
سلام
عالی بود .ممنون.
saman۱۱ بهمن ۱۳۹۸، ۰۹:۳۳
دوتا غلط نوشتاری داری توش یکیش اینه :
در متد POST محدودیت بسیار بیشتری (غلطه کمتری درسته) برای ارسال اطلاعات وجود دارد، به کمک POST میتوان دادههای متنی و بابنری (آپلود فایل) ارسال کرد
نازنین کریمی مقدم۰۲ مهر ۱۳۹۹، ۱۰:۱۹
سلام. متد پست محدودیتهای بیشتری برای ارسال اطلاعات داره :)
خیلی ممنون از اطلاع اشتباه تایپی، اصلاح شد.
حمید۰۳ دی ۱۳۹۸، ۱۱:۵۹
سلام
من تفاوت متد GET و POST را در هنگام ارسال داده به سرور (اولی از طریق URL و دومی بدون نمایش در URL) را متوجه شدم، اما فرق متد POST برای ثبت داده و GET برای خواندن داده را متوجه نشدم.
با عبارتی برای خواندن داده نیز مرسوم است از POST استفاده کنیم و یا برای ارسال داده به سرور برای ذخیره داده از GET؟
با سپاس
من دیگه۱۴ آذر ۱۴۰۰، ۱۰:۲۱
دوست عزیز
دقت کنید به مزایا و معایب این دو کامل دستت میاد
۲۹ اسفند ۱۴۰۱، ۱۱:۱۴
هر دو کارشون یکی هست، ولی روششون فرق میکنه، به اسمشون توجه نکنید
راهنمای مقاله
HTTP چیست ؟
متد Get چیست؟
متد POST چیست؟
ارسال مقدار متغیرها از یک صفحه به صفحه ای دیگر با روش POST در PHP
تفاوت متد GET و POST در PHP
دریافت و ارسال اطلاعات با متد GET در جاوا اسکریپت
دریافت و ارسال اطلاعات با متد POST در جاوا اسکریپت
از متد GET یا POST استفاده کنیم؟
راهنما و فهرست مقاله
HTTP چیست ؟
متد Get چیست؟
متد POST چیست؟
ارسال مقدار متغیرها از یک صفحه به صفحه ای دیگر با روش POST در PHP
تفاوت متد GET و POST در PHP
دریافت و ارسال اطلاعات با متد GET در جاوا اسکریپت
دریافت و ارسال اطلاعات با متد POST در جاوا اسکریپت