آنچه در این مقاله میخوانید
تفاوتهای میان متدهای GET و POST
۱۰ شهریور ۱۳۹۹
برای ارسال دادهها از مرورگر کاربر به سرور در برنامههای PHP، معمولاً از دو متد HTTP پرکاربرد بهنامهای GET و POST استفاده میشود. این متدها به ما اجازه میدهند اطلاعات وارد شده در فرمها را دریافت کرده و در سمت سرور پردازش کنیم.
- GET برای دریافت داده از سرور بهکار میرود. در این روش، اطلاعات فرم بهصورت رشتهای به انتهای آدرس URL افزوده میشوند.
- POST برای ارسال داده به سرور جهت پردازش استفاده میشود. در این متد، اطلاعات فرم در بدنهی درخواست قرار میگیرند و در URL نمایش داده نمیشوند.
پیش از ارسال اطلاعات، مرورگر آنها را براساس ساختاری بهنام URL encoding یا percent encoding رمزگذاری (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 نمیشوند و نیز محدودیت کاراکتری در آنها وجود ندارد. |
معرفی هاست رایگان PHP
هاست PHP
جمع بندی
در توسعهی وب با PHP، انتخاب صحیح بین متدهای GET و POST نقش مهمی در امنیت، کارایی و تجربهی کاربری دارد. متد GET برای دریافت دادههایی مناسب است که نیازی به پنهانسازی ندارند و حجم کمی دارند، اما باید از آن برای اطلاعات حساس مانند رمز عبور استفاده نشود. در مقابل، POST برای ارسال دادههای حجیم و محرمانه گزینهای مناسبتر و امنتر است.
اگرچه هر دو متد در انتقال داده به سرور کاربرد دارند، اما تفاوتهایی در شیوه ارسال، امنیت، نمایش در URL و قابلیت کش شدن دارند. GET بیشتر برای واکشی داده و نمایش محتوا استفاده میشود، در حالیکه POST برای ارسال و ذخیرهسازی دادههای کاربر بهکار میرود.
در نهایت، درک دقیق این دو متد به شما کمک میکند تا با انتخاب درست، اپلیکیشنی امنتر و بهینهتر طراحی کنید.