کاربرد و تفاوت متدهای GET و POST در HTML و php
اطلاعاتی که کاربران از طریق فرمهای وب یا از طریق AJAX به سرور میفرستند با دو روش GET و POST میتوانند ارسال شوند. هر یک از این روشها دارای مزایا و معایب و کاربردهای مختلفی است که در ادامه به آنها میپردازیم.
برای تعیین روش ارسال اطلاعات در فرم HTML از صفت method به شکل زیر استفاده میکنیم:
1 2 3 |
<form action="submit.php" method="POST"> <!-- form fields --> </form> |
روش GET چیست ؟
در روش GET اطلاعاتی که کاربر در فرم پر میکند، به انتهای نشانی سایت اضافه میشوند و در نتیجه نشانی صفحهی باز شدن فرم تغییر میکند. برای مثال هنگامی که در یک فرم HTML دو فیلد email و password را داشته باشیم و آن را با روش GET ارسال کنیم، نشانی صفحهی مقصد ما به صورت زیر خواهد بود:
1 |
https://example.com/?email=info@example.com&password=123456 |
همان طور که مشاهده میکنید، مقدارهای وارد شده در فیلد email و password به آسانی قابل مشاهده هستند.
روش POST چیست ؟
در روش POST اطلاعات ارسالی کاربر، در سرآمدهای درخواست قرار میگیرند و نشانی صفحه تغییری نمیکند. به عبارت دیگر، هر تعداد فیلد که در فرم ما وجود داشته باشد و از هر نوعی که باشند، محدودیتی برای روش POST وجود ندارد و این اطلاعات در سرآمد درخواست کدگذاری و ارسال خواهند شد.
معایب و محدودیتهای روش GET
در روش GET با محدودیتهایی روبرو هستیم که به همین دلیل همیشه نمیتوان از این روش استفاده نمود.
- اطلاعات خصوصی کاربر مثل رمز در نشانی صفحه قابل دیدن هستند و ممکن است با این روش مورد سرقت قرار بگیرند.
- طول مجاز و قابل قبول نشانی صفحات در مرورگرها و وب سرورهای مختلف ممکن است با محدودیتهایی روبرو باشد و اگر مقدار اطلاعات ارسالی زیاد باشد، ممکن است اجرای سایت با مشکلاتی مواجه شود.
- استفاده از روش GET برای شناسایی درخواستهای کاربر ممکن است اثرات منفی روی سئو سایت داشته باشند. گوگل هر زمان ممکن است به اشتباه، برخی از پارامترهای روش GET را بی ارزش تشخیص دهد و حجم زیادی از صفحات سایت را از ایندکس خود حذف کند.
- اطلاعات در روش GET با احتمال بیشتری ممکن است در مرورگر یا سرورهای واسط Cache شوند و کاربر اطلاعات غیرروزآمد یا نادرست را مشاهده کند. به ویژه هنگام استفاده از AJAX برای دریافت اطلاعات باید به این موضوع توجه شود.
- هنگام استفاده از AJAX برای ارسال درخواستهای متعدد به سرور، مرورگر ممکن است تمامی این اطلاعات را در Cache ذخیره کند در حالی که نیازی به ذخیرهسازی آنها وجود ندارد.
- امکان آپلود فایل با روش GET وجود ندارد و محتویات فایل نمیتوانند با این روش به سرور ارسال شوند.
- هنگام ارسال اطلاعاتی که نویسههای غیرمجاز برای نشانی صفحات در آن موجود است، حجم اطلاعات ارسالی به مقدار زیادی افزایش پیدا میکند زیرا این اطلاعات باید Url Encode شوند.
معایب و محدودیتهای روش POST
روش POST نیز همانند روش GET با محدودیتها و معایبی همراه است:
- به دلیل اینکه نشانی صفحه همیشه ثابت است، استفاده از روش POST برای انجام برخی از کارها باعث سردرگمی کاربران میشود. مثلا برای جستجوی یک عبارت، اگر از روش POST استفاده کنیم، از روی نشانی صفحه مشخص نیست که کاربر چه چیزی را درخواست کرده است.
- اگر کاربران آدرس صفحهی فعلی را به صورت عادی مجددا باز کنند، با محتوای نامشخصی روبرو خواهند شد زیرا پارامترهای ارسالی فرم در مرورگر ذخیره نمیشوند و صفحه بدون پارامترها باز خواهد شد.
کاربردهای روش GET
روش GET دارای برخی کاربردهای شناختهشده است که شامل نتایج جستجو، باز کردن صفحات مختلف سایت و صفحهبندی نتایج است.
کاربردهای روش POST
از روش POST معمولا برای فرمهای ورود و ثبت نام، فرمهایی با تعداد فیلدهای زیاد، فرمهایی که در آن آپلود فایل انجام میشود و کلیه فرمهایی که اطلاعات حساس در آن موجود است، استفاده میشود.
صفت enctype
هنگامی که میخواهیم در یک فرم آپلود فایل را انجام دهیم، لازم است تا علاوه بر تغییر روش به POST، مقدار صفت enctype را هم به صورت زیر تغییر دهیم. در غیر این صورت اطلاعات به همان صورت URL Encoded که در روش GET استفاده میشود، کدگذاری میشوند و امکان آپلود فایل فراهم نمیشود.
1 2 3 |
<form action="submit.php" method="post" enctype="multipart/form-data"> <input type="file" name="my-file"> </form> |
تعیین نکردن مقدار enctype باعث میشود تا این فیلد مقدار پیشفرض «application/x-www-form-urlencoded» را دریافت کند.