تفاوتهای میان متدهای GET و POST
۱۰ شهریور ۱۳۹۹
برای رسیدگی به فرمها در زبان PHP، دو متد HTTP وجود دارد که یکی از آنها GET و دیگری POST نام دارد. همچنین به کمک این متدها میتوانیم دادههای موجود در فرم را از مرورگر کاربر به وبسرور ارسال کنیم.
- GET: در این متد، دادهها از یک منبع خاص مانند وبسرور درخواست میشوند.
- POST: توسط این متد، دادهها ارسال میشوند تا در یک منبع خاص مورد پردازش قرار گیرند.
قبل از اینکه مرورگر دادههای ما را توسط این متدها به وبسرور ارسال کند توسط اسکیمایی (schema) بهنام URL (Uniform Resource Locator)، آن دادهها را encode میکند. در این اسکیما، کاراکترهایی که جزء حروف الفبا نیستند به مقادیر hexadecimal تبدیل شده و همچنین فاصلهها هم با کاراکتر +
جایگزین میشوند. پس از اینکه دادهها با این اسکیما encode شدند، به سرور ارسال میشوند.
در ادامه این مقاله، به سوالات زیر پاسخ خواهیم داد:
- متد GET چیست؟
- متد POST چیست؟
- تفاوتهای میان متدهای GET و POST چیستند؟
متد GET چیست؟
با استفاده از این متد، دادههای موجود در فرم به صورت جفتهایی به شکل name=value
در URL قرار میگیرند (در تصویر این مورد را بهتر مشاهده خواهید کرد). طول URL به 2048 کاراکتر محدود شده است. درصورت داشتن اطلاعات حساسی مانند رمزعبور، نباید از این متد برای ارسال دادهها به سمت سرور استفاده کرد و به همین دلیل بیشترین کاربرد این متد برای ارسال دادههایی است که نیاز به حفظ و نگهداری ندارند. همچنین باید افزود که نمیتوانید از این متد برای ارسال دادههای باینری مانند تصاویر یا فایلهای Word، استفاده کنید. برای دسترسی به تمام اطلاعاتی که از طریق متد GET ارسال میشوند، میتوانید از آرایه $_GET
در زبان PHP استفاده کنید.
<?php if(isset($_GET["name"])){ echo " Welcome," . $_GET["name"] . " "; } ?>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form method="GET" action="<?php echo $_SERVER["PHP_SELF"];?>">
<label for="inputName">Name:</label>
<input type="text" name="name" id="inputName">
<input type="submit" value="Submit">
</form>
</body>
</html>
متد POST چیست؟
در این متد دادههای موجود در فرم به بدنه درخواست HTTP اضافه شده و در URL نمایش داده نمیشوند، به همین دلیل برای ارسال دادههایی مانند رمزعبور مناسب است، همچنین با استفاده از این متد دیگر هیچ محدودیتی در اندازه دادههای ارسالی وجود ندارد. از این متد میتوان برای ارسال دادههای ASCII و همچنین دادههای باینری مانند تصاویر و فایلهای Word به سرور، استفاده کرد. دادههای ارسال شده با متد POST در HTTP header قرار میگیرند، بنابراین حفظ و ایمنی دادهها به ایمن بودن پروتکل HTTP بستگی دارد. البته باید بدانید که اطلاعات شما با استفاده از پروتکل ایمن HTTP که به HTTPS معروف است، ایمن خواهد ماند و میتوان گفت که متد POST از متد GET ایمنتر است زیرا پارامترهای ارسال شده، در تاریخچه مرورگر یا در لاگهای وبسرور ذخیره نمیشوند. برای دسترسی به کلیه اطلاعات ارسال شده توسط متد POST به سرور در زبان PHP میتوانید از آرایه $_POST
استفاده کنید.
<?php if(isset($_POST["name"])){ echo " Welcome," . $_POST["name"] . " "; } ?>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form method="POST" action="<?php echo $_SERVER["PHP_SELF"];?>">
<label for="inputName">Name:</label>
<input type="text" name="name" id="inputName">
<label for="password">password:</label>
<input type="password" name="pass">
<input type="submit" value="Submit">
</form>
</body>
</html>
تفاوتهای میان متدهای GET و POST چیستند؟
GET | POST |
---|---|
پارامترهای ارسال شده توسط این متد در URL قرار میگیرند. | پارامترهای ارسال شده توسط این متد در بدنه درخواست HTTP قرار میگیرند. |
از درخواستهای GET اغلب برای دریافت دادههای مورد نیاز استفاده میشود و با استفاده از پارامترهای GET میتوانیم متوجه شویم که به دنبال چه چیزی هستیم یا در کدام صفحه از صفحات وبسایت قرار گرفتهایم. | از پارامترهای ارسال شده توسط متد POST برای بهروزرسانی دادهها و درنهایت ایجاد تغییر در سرور استفاده میشود یا دادههای ارسال شده، در سرور ذخیره میشوند. |
با وجود محدودیتهای کاراکتری در URL، ممکن است استفاده از متد GET مشکل ساز شود. | به صورت پیشفرض هیچگونه محدودیتی وجود ندارد اما میتوان سرور را پیکربندی کرده و محدودیتهایی در این زمینه اعمال کرد، اما هرچه باشد بهتر از محدودیت حدودا 2000 کاراکتری متد GET است. |
زمانی که شما یک درخواست GET ایجاد میکنید مکانسیمهای زیادی بین شما و سرور اتفاق میافتد که میتوان به کمک این مکانیسمها از بارگیری فایلهای cache شدهای که تغییری در آنها ایجاد نشده، جلوگیری کرد. | پارامترهای موجود در متد POST را معمولا cache نمیکنند زیرا این دادهها با هدف بهروزرسانی دادههای موجود در سرور ارسال میشوند و بهتر است که آنها را cache نکنیم. |
نباید باعث ایجاد تغییر در سرور شوند، باید بتوانید بدون اینکه در سرور تغییری ایجاد شود، بارها و بارها درخواستهای GET خود را به سمت سرور ارسال کنید. | از درخواستهای POST میتوانید برای بهوجود آوردن تغییرات در سرور استفاده کنید، این درخواستها cache نمیشوند و نیز محدودیت کاراکتری در آنها وجود ندارد. |
امیدوارم به کمک این مقاله تفاوتهای میان متدهای POST و GET را فراگرفته باشید.
توسعهدهندگان دربارهی ما چه میگویند
تجربه کار باliara_cloud@امروز خیلی خوب بود. یکی از سرویس هام رو منتقل کردم روش و راضیم. انقد سریع و جذاب کارم راه افتادم اصن باورم نمیشد! برعکس سرویس های PaaS دیگه با اون همه پیچیدگیشون. دمتون گرم
...
MohammadReza
keikaavousi
بعد از بسته شدن @fandoghpaas و ناراحتی همهمون از اینکه یه سرویس خوب و صادق نمیتونه از پس هزینهها بر بیاد، سرویسم رو منتقل کردم به پاس لیارا (https://liara.ir @liara_cloud) . تجربه راحت و خوب. تفاوتهایی داشت که کمی کار میخواست ولی تا الان کاملا راضی.
jadi
jadi
یه خسته نباشید باید به تصمیمliara_cloud@بگم،
بعد از چندین روز سرکله زدن با سرویس های مشابه بالاخره تصمیم گرفتم لیارا رو امتحان کنم و باور نمیشه ۱۰ دقیقه بیشتر وقت نبرد،
دمتون گرم.
Arch
EbadiDev
واسه سرویس PaaS با اختلاف لیارا بهترین رابط کاربری داره و یکی از مزیتهای سرویس دیتابیسشون اینه که خودشون به صورت دورهای بکآپ میگیرن.
...
Ali Najafi
me_ali_najafi
یکی از کارهای خوبی که جدیداً میکنم اینه که یه دیتابیس روی لیارا میسازم و به پروژه وصل میکنم اینطوری هم خونه و هم محل کار دیتابیس بروز رو دارم و راحت میتونم ادامه بدم کار روliara_cloud@
Navid
1navid
عاشقliara_cloud@شدم درسته در حد AWS نیست ولی خب تجربه خوبی واسه پروژه های داخل ایران ارائه میده، میتونم رو CD هم اجراش کنم
Amir H Shekari
vanenshi