ویژگی method فرم HTML
تعریف و کاربرد
method
خصوصیات تعیین میکنند که دادههای فرم چگونه ارسال شوند (دادههای فرم به صفحهای که در ویژگی action مشخص شده ارسال میشوند).
دادههای فرم میتوانند به عنوان متغیرهای URL (با استفاده از method="get") یا به عنوان معامله HTTP POST (با استفاده از method="post") ارسال شوند.
توضیحات در مورد GET:
- دادههای فرم را به صورت نام/مقدار به URL ضمیمه کنید
- URL دارای محدودیت در طول است (حدود 3000 کاراکتر)
- از استفاده از GET برای ارسال دادههای حساس خودداری کنید! (در URL قابل مشاهده خواهد بود)
- برای فرمهایی که کاربران میخواهند نتایج را به عنوان لینکنویسی ذخیره کنند بسیار مفید است
- GET برای دادههای غیر امن مناسبتر است، مانند جستجوهای رشتهای در Google.
توضیحات در مورد POST:
- دادههای فرم را در متن درخواست HTTP اضافه میکنند (دادهها در URL نمایش داده نمیشوند).
- بدون محدودیت در اندازه.
- فرمهایی که با استفاده از POST ارسال میشوند، نمیتوانند به عنوان لینکهای محفوظ (bookmarks) ذخیره شوند.
مثال
مثال 1
فرم را با روش "get" ارسال کنید:
<form action="/action_page.php" method="get"> <label for="fname">نام:</label> <input type="text" id="fname" name="fname"><br><br> <label for="lname">نام خانوادگی:</label> <input type="text" id="lname" name="lname"><br><br> <input type="submit" value="ارسال"> </form>
مثال 2
فرم را با روش "post" ارسال کنید:
<form action="/action_page.php" method="post"> <label for="fname">نام:</label> <input type="text" id="fname" name="fname"><br><br> <label for="lname">نام خانوادگی:</label> <input type="text" id="lname" name="lname"><br><br> <input type="submit" value="ارسال"> </form>
نحوهی نوشتن
<form method="get|post">
مقدار ویژگی
مقدار | توضیح |
---|---|
get | پیشفرض. دادههای فرم را به صورت نام/مقدار به URL متصل کنید: URL?name=value&name=value. |
post | دادههای فرم را به عنوان تراکنش HTTP post ارسال کنید. |
شرح ویژگی method
مرورگر دادههای فرم را با روشی که در ویژگی method تنظیم شده است، به سرور برای پردازش ارسال میکند. دو روش وجود دارد: روش POST و روش GET.
اگر از روش POST استفاده شود، مرورگر دادهها را بر اساس دو مرحله زیر ارسال میکند. ابتدا، مرورگر با سرور پردازش فرم که در ویژگی action مشخص شده است، ارتباط برقرار میکند و پس از برقراری ارتباط، مرورگر دادهها را به روش انتقال قطعهای به سرور ارسال میکند.
در سرور، زمانی که برنامه با فرمت POST شروع به اجرا میکند، باید از یک موقعیت نشانهگذاری شده پارامترها را خواند و قبل از اینکه برنامه بتواند از این مقادیر فرم استفاده کند، باید این پارامترها را رمزگشایی کند. سرور خاص کاربر باید به وضوح مشخص کند که برنامه چگونه باید این پارامترها را دریافت کند.
در حالت دیگری که از روش GET استفاده میشود، مرورگر با سرور پردازش فرم ارتباط برقرار میکند و سپس تمامی دادههای فرم را در یک مرحله انتقالی ارسال میکند: مرورگر دادهها را مستقیماً به URL action فرم متصل میکند. این دو با علامت سوال جدا میشوند.
معمولاً مرورگرها از هر یک از این روشها برای انتقال اطلاعات فرم استفاده میکنند، در حالی که برخی از سرورها تنها از یکی از این روشها دادهها را میپذیرند. میتوانید از属性 method (روش) برچسب <form> برای مشخص کردن اینکه سرور فرم پردازش باید از کدام روش برای پردازش دادهها استفاده کند، استفاده کنید، یعنی POST یا GET.
POST یا GET؟
اگر سرور فرم پردازش هم از روش POST و هم از روش GET پشتیبانی میکند، باید از کدام روش استفاده کنید؟ در اینجا چند قانون در این زمینه آورده شده است:
- اگر میخواهید بهترین عملکرد انتقال فرم را داشته باشید، میتوانید از روش GET برای ارسال فرمهای کوچک با تعداد کمی فیلد کوتاه استفاده کنید.
- برخی از سیستمعاملهای سرور در پردازش پارامترهای خط فرمان که به طور مستقیم به برنامهها منتقل میشوند، تعداد و طول آنها را محدود میکنند. در این موارد، برای فرمهایی که دارای تعداد زیادی فیلد یا فیلدهای طولانی هستند، باید از روش POST برای ارسال استفاده کنید.
- اگر تجربه کمی در نوشتن برنامههای فرم پردازش سرور دارید، باید از روش GET استفاده کنید. اگر از روش POST استفاده کنید، باید کارهای اضافی برای خواندن و رمزگشایی روش انجام دهید، که ممکن است خیلی سخت نباشد، اما ممکن است شما تمایل به انجام این کارها نداشته باشید.
- اگر امنیت یک مشکل است، ما پیشنهاد میدهیم که از روش POST استفاده کنید. روش GET پارامترهای فرم را مستقیماً در URL برنامه قرار میدهد، به طوری که هکرهای شبکه به راحتی میتوانند آنها را بگیرند و از فایلهای لاگ سرور نیز میتوانند استخراج کنند. اگر پارامترها شامل اطلاعات حساس مانند شماره کارت اعتباری باشند، ممکن است بدون اطلاع به کاربر امنیت او به خطر بیفتد. برنامههای POST هیچ حفره امنیتی ندارند و حداقل میتوانند از روش رمزگذاری برای انتقال پارامترها به سرور به عنوان یک تراکنش جداگانه استفاده کنند.
- اگر میخواهید برنامه سرور سمت سرور را فراخوانی کنید و پارامترها را به آن انتقال دهید، باید از روش GET استفاده کنید، زیرا این روش اجازه میدهد که پارامترهای مانند فرم به عنوان بخشی از URL درآیند. از سوی دیگر، برنامههایی که به روش POST استفاده میکنند، میخواهند که فرآیند انتقال اضافی از سوی مرورگر در پس از URL داشته باشند، که محتوای آن نمیتواند به عنوان محتوای برچسب سنتی <a> در نظر گرفته شود.
انتقال پارامترهای واضح
نکات قبلی نیز میتوانند به عنوان توضیحی برای انتخاب این روش در نظر گرفته شوند. فرض کنید فرمی ساده دارید که شامل پارامترهای x و y است. در هنگام کدگذاری مقادیر این عناصر، به صورت زیر خواهد بود:
x=28&y=66
اگر فرم از method=GET استفاده کند، URL برای اشاره به برنامه سرور سمت سرور به صورت زیر خواهد بود:
http://www.example.com/example/program?x=28&y=66
در هر زمان میتوانیم یک برچسب سنتی <a> ایجاد کنیم و از آن برای فراخوانی فرم با پارامترهای مورد نیاز استفاده کنیم، که به صورت زیر است:
<a href="http://www.example.com/example/program?x=28&y=66">
تنها مشکل این است که نشانه ویریگ (&) که برای جدا کردن پارامترها استفاده میشود، نیز یک实体 کارت است. اگر در ویژگی href برچسب <a> یک نشانه ویریگ (&) قرار دهید، مرورگر کاراکترهای بعدی را با معادل实体 آنها جایگزین خواهد کرد.
برای جلوگیری از این مسئله، باید از معادل实体 آن برای جایگزینی نشانه ویریگ (&) استفاده کنیم، یعنی از "&" یا "&" استفاده کنیم. پس از جایگزینی، مثال بالا که به یک برنامه سرور اشاره میکند و فرم نیست، به صورت زیر خواهد بود:
<a href="http://www.example.com/example/program?x=28&y=66">
چون همچنان نمیتوان از نشانه ویریگ (&) در URL استفاده کرد و ممکن است در آینده منجر به سردرگمی شود، بنابراین ما تشویق میکنیم که سرورها نیز از نشانهای مانند نقطه ویرگول برای جدا کردن پارامترها استفاده کنند. شما همچنین میتوانید مستندات سرور خود را بررسی کنید تا بفهمید آیا این ویژگی پشتیبانی میشود یا خیر.
پشتیبانی از مرورگر
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome | Edge | Firefox | Safari | Opera |
پشتیبانی | پشتیبانی | پشتیبانی | پشتیبانی | پشتیبانی |