متد GET در برابر متد POST

متد GET در برابر متد POST
بدون شک هر کسی که در حوزه وب فعالیت داشته با فرم های HTML کار کرده. وقتی شما اطلاعات شخصیتون رو در سایتی وارد می کنید و سپس دکمه submit رو می زنید در واقع اطلاعاتتون رو در یک فرم HTML قرار داده اید. فرم ها برای ارسال اطلاعات از مرورگر کاربر به سمت وب سرور استفاده می شوند.
برای مثال وقتی در سرویس Gmail وارد می شوید, نام کاربری و رمز عبورتان را در داخل یک فرم HTML وارد  می کنید و با انتخاب sign in , نام کاربری و رمز عبورتان را در قالب یک فرم HTML به وب سرور Google ارسال می کنید.
دارالترجمه رسمی
دارالترجمه رسمی پارسیس شامل خدمات ترجمه رسمی و تخصصی در بیش از 60 زبان زنده دنیا
جای بروشور دیواری
خرید جای بروشور دیواری و رومیزی
افزونه های سئو وردپرس
بهترین افزونه های سئو وردپرس به صورت کاملا فارسی
تعمیر لوازم خانگی
تعمیر جاروبرقی، مایکروفر، بخارشوی، ظرفشویی، لباسشویی، سولاردام، کولرگازی
خودتان را اینجا معرفی کنید

دو راه برای ارسال شدن فرم شما از مرورگر به سمت وب سرور وجود دارد که در HTML می توان با کمک مشخصه ی method آن را تعیین کرد.
<form method="POST"></form>
<form method="GET"></form>
زمانی که یک فرم submit می شود , یک درخواست HTTP که مسئول انتقال داده ها به وب سرور هست ایجاد می شود. این طور تصور کنید که HTTP زبان مشترک مرورگر شما و وب سرور است و نوع این درخواست HTTP به متد استفاده شده در فرم بستگی دارد.
اگر در فرم از متد GET استفاده کنیم , پارامترهای فرم کدگزاری شده و به همراه URL ارسال می شوند که این روش را "query string" می نامند. پارامترهای فرم هم میتواند هر چیزی باشد برای مثال ایمیل و رمز عبور برای ورود به یک سایت و یا نام و نام خانوادگی و رمز عبور برای ثبت نام در یک وب سایت که در شکل زیر مثالی برای حالت دوم در نظر گرفته شده است.


همانطور که می بینید پارامترهای فرم (regName,regFamily,regPass) به همراه مقادیرشان در انتهای URL اضافه شده اند. البته به هیچ وجه استفاده از متد GET برای فرم های ثبت نام یا ورود کاربر توصیه نمی شود که در ادامه بحث به دلیل استفاده نکردن از آن می پردازیم.
متد POST برخلاف متد GET , اطلاعات را در URL ارسال نمی کند بلکه آنها را در قالب بدنه درخواست HTTP  ارسال می کند و در نتیجه امنیت بالاتری نیز دارد. پس جز موارد خاص مانند فرم های جست و جو (کمتر از 10% فرم ها) در بقیه فرم ها از متد POST استفاده خواهیم کرد. در ضمن اگر متد فرم را مشخص نکنیم , مرورگر به طور پیش فرض از متد GET استفاده می کند.


برای دریافت پارمترهای فرم ارسالی می توان از آرایه های سوپرگلوبال POST و GET به صورت زیر استفاده کرد.
<?php 
if (isset($_POST['sub'])) {
    echo "username: ".$_POST['username']."<br/>";
    echo "password: ".$_POST['password'];
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test Form</title>
</head>
<body>
    <form action="" method="post">
        username:<input type="text" name="username">
        password:<input type="text" name="password">
        <input type="submit" name="sub">
    </form>
</body>
</html>

مقادیر $_POST['username'] و $_POST['password'] به ترتیب مقادیر username و password را نمایش می دهند. در ادامه به تفاوت درخواست های POST و GET می پردازیم...
 

متد GET
  • به راحتی bookmark می شود.
  • در مرورگر کاربر cache می شود.
  • پارامترها در history کاربر به جا می مانند زیرا جزئی از URL هستند.
  • پارامترها را در قالب URL ارسال می کنند و معمولا تا حداکثر 2KB می تواند ارسال شود. ( بعضی سرورها تا 64KB را نیز پشتیبانی می کنند)
  • به سادگی قابل هک شدن هستند.
  • فقط کاراکترهای ASCII مجاز است.
  • دارای امنیت به شدت پایین می باشد.
  • برای ارسال داده های مهم اعم از رمز عبور , مناسب نیست.
  • امکان ارسال حداکثر 7607 کاراکتر  برای داده های بزرگ وجود دارد.
 
متد POST
  • Bookmark  نمی شود.
  • در مرورگر کاربر cache نمی شود.
  • در هنگام ارسال دوباره فرم (فشردن کلید F5) , مرورگر پیغامی را به کاربر نمایش می دهد مبنی بر ارسال و ثبت مجدد اطلاعات.
  • میتوان فایل آپلود کرد.
  • هک کردن آن مشکل تر است.
  • برخلاف کاراکترهای ASCII , داده های Binary هم مجاز است.
  • برای ارسال داده های مهم مناسب است.
  • متغیرهای ارسالی توسط این متد , در URL نمایش داده نخواهد شد.
  • امکان ارسال حداکثر 8MB  برای داده های بزرگ وجود دارد.
در آخر دقت کنید که جز در شرایط خیلی خاص , در اکثر مواقع از متد POST استفاده کنید...
 

رضا از سال 87 برنامه نویسی را با زبان های خانواده C شروع کرد و بعد از 4 سال به سمت طراحی و برنامه نویسی تحت وب رفت. وی همزمان با تحصیل در مقطع کارشناسی رشته مهندسی کامپیوتر به امر ترجمه کتاب در حوزه برنامه نویسی مشغول بود که کتاب او در مرحله ویراستاری قرار دارد. به روز بودن و افزایش مستمر اطلاعات شخصی در زمینه وب دغدغه ی اصلی و همیشگی رضاست.

نظرات و سوالات کاربران

ارسال پاسخ samiya
samiya
سه شنبه ۱۸ دی ۱۳۹۷ ۱۰:۳۶
ممنون مطلب خوبی بود استفاده بردم