PDA

View Full Version : سوال: مزیت get نسبت به post چیست؟



marasiali
جمعه 30 بهمن 1394, 03:08 صبح
سلام
میخوام بدونم get نسبت به post چه مزیتی داره که گذاشتنش؟
چون هرجا میبینم میگن post بهتره و امن تره و طول کاراکتر ارسالیش بیشتره و از اینحرفا پس با این حساب دیگه چرا get رو گذاشتن؟یعنی هیچ برتری نسبت به post نداره؟

مهرداد سیف زاده
جمعه 30 بهمن 1394, 03:31 صبح
این‌ها متدهای ارسال و دریافت مقادیر بین صفحات هست. هدف طراحی هر کدوم از این‌ها مزیت نسبت به دیگری نبوده. و امنیت هر دو هم یکی هست(که اصلا هدف امنیت در کار نبوده)
در متد GET داده‌ها به عنوان url ارسال و دریافت میشن. مثلا شما صفحه هر سایتی رو بالا میارید بدون این که اصلا لینک از اون سایت رو باز کنید، دارید متد GET رو با پارامتر / صدا میکنید که باعث میشه این دستور به وب سرور اون سایت بره و سایت برای شما بالا بیاد.
متد post در بسته http قرار میگیره و ارسال میشه. در این روش دیگه مقادیر در url قرار نمیگیرن و توسط بسته http رد و بدل میشه. برای ارسال فایل از کلاینت به سرور هم از متد post استفاده میشه که با multi part کردن فایل برای سرور ارسال میشه. متد post برای ارسال مقادیر ajax مناسب هست که مقداری باید ارسال بشه و سرور بگیره و مثلا در دیتابیس ذخیره کنه. یا از دیتابیس داده بگیره و جواب بده
هر برنامه نویس وب باید روشهای ارسال و دریافت رو بلد باشه.
https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol

marasiali
جمعه 30 بهمن 1394, 07:36 صبح
این‌ها متدهای ارسال و دریافت مقادیر بین صفحات هست. هدف طراحی هر کدوم از این‌ها مزیت نسبت به دیگری نبوده. و امنیت هر دو هم یکی هست(که اصلا هدف امنیت در کار نبوده)
در متد GET داده‌ها به عنوان url ارسال و دریافت میشن. مثلا شما صفحه هر سایتی رو بالا میارید بدون این که اصلا لینک از اون سایت رو باز کنید، دارید متد GET رو با پارامتر / صدا میکنید که باعث میشه این دستور به وب سرور اون سایت بره و سایت برای شما بالا بیاد.
متد post در بسته http قرار میگیره و ارسال میشه. در این روش دیگه مقادیر در url قرار نمیگیرن و توسط بسته http رد و بدل میشه. برای ارسال فایل از کلاینت به سرور هم از متد post استفاده میشه که با multi part کردن فایل برای سرور ارسال میشه. متد post برای ارسال مقادیر ajax مناسب هست که مقداری باید ارسال بشه و سرور بگیره و مثلا در دیتابیس ذخیره کنه. یا از دیتابیس داده بگیره و جواب بده
هر برنامه نویس وب باید روشهای ارسال و دریافت رو بلد باشه.
https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol

خب چرا دو تا به وجود اومده؟وقتی post کاملتر هست و همه قابلیت های get رو هم داره چه نیازی بوده نوع متد get تعبیه بشه؟

hamedarian2009
جمعه 30 بهمن 1394, 12:14 عصر
چون هرکدوم کاربرد خودشو داره و باید دوتا باشه الان شما مگه آدرس یک سایت رو در مرورگر مینویسی و ارد سایت میشی یا روی لینک ها کلیک میکنی اینها هم درخواست های get هستن
مزیت get اینه که کش میشه و تو هیستوری مرورگر باقی میمونه و همینطور میتونی بوکمارکش کنی و مناسب دریافت اطلاعات هست
post هم مناسب درج داده تو دیتابیس هست که کش هم نمیشه و اطلاعات تو url هم نشون داده نمیشه و حجم بیشتری از داده رو هم میتونید ارسال کنید

us1234
جمعه 30 بهمن 1394, 15:49 عصر
خب چرا دو تا به وجود اومده؟وقتی post کاملتر هست و همه قابلیت های get رو هم داره چه نیازی بوده نوع متد get تعبیه بشه؟

اگر get نبود باید در تمام صفحات برای لینک ها form درست می کردید .
یا تمام bot ها crawl های موتور های جستجو برای تک تک صفحه فرم پست می کردند :)
یا مثلا نمیشد لینک یک صفحه را از طریق مسنجر ها ( یا پیامک یا حتی کاغذ معمولی ) به یک دوست داد و حتما باید یک فایل html حاوی فرم به کاربر ارسال می کردیم :))

ولی بازم این دلیل اصلی نیست ساختار این 2 نوع استاندارد ارسال و دریافت اطلاعات به این شکل طراحی شده و هیچ کدومش هم از اون یکی برتری نداره چون اهدافشون فرق داره ...

یک مثال برای ملموس شدن قضیه ، در ارتباطات شبکه 2 پروتکل tcp و udp داریم که کاربردشون تقریبا شبیه به همه ، پس میشه گفت تا وقتی tcp هست چرا از udp استفاده کنیم ؟ اصلا هدف و کاربرد آنها فرق داره درسته هر 2 یک کار را انجام میدهند ...

مهرداد سیف زاده
جمعه 30 بهمن 1394, 17:00 عصر
خب چرا دو تا به وجود اومده؟وقتی post کاملتر هست و همه قابلیت های get رو هم داره چه نیازی بوده نوع متد get تعبیه بشه؟
با توجه به پاسخ‌های دوستان
یا باید با مطالعه لینکی که دادم متوجه بشید یا دست به کد بشید و یه نمونه کد بنویسید. این طوری به کاربرد هر کدوم پی‌میبرید

ravand
شنبه 01 اسفند 1394, 03:05 صبح
یکی از دلایل اینکه میگن روش get امنیتش پایین تر هست به خاطر اینه که وقتی رمز رو وارد کردید اون بالا توی آدرس بار نمایش داده میشه. و اگه کسی نمایشگر شما رو ببینه ....
مثلا اینطوری:

http://localhost/test.php?pass=1234

SZsXsZS
شنبه 01 اسفند 1394, 06:34 صبح
این پست تا اطلاع ثانوی حذف شد!

mehdiweber
یک شنبه 02 اسفند 1394, 20:19 عصر
متد get تمام مقادیر وارد شده و ارسال شده را در نوار ادرس url مرورگر نمایش میده و امنیت پایینی نسبت به متد post داره...چون متد post فقط ادرس صفحه ی ارسال شده را در url نشون میده و اطلاعات دیگری را که ارسال کرده ایم نشان نمیدهد

[younes]
دوشنبه 03 اسفند 1394, 02:43 صبح
متد get تمام مقادیر وارد شده و ارسال شده را در نوار ادرس url مرورگر نمایش میده و امنیت پایینی نسبت به متد post داره...چون متد post فقط ادرس صفحه ی ارسال شده را در url نشون میده و اطلاعات دیگری را که ارسال کرده ایم نشان نمیدهد
post و get هر دو روشی برای انتقال داده به سرور هستند. امنیت یک برنامه تحت وب به نحوه استفاه از این متد ها بستگی داره نه خود متد. plain text رو از هر روشی ارسال کنید در بین راه قابل رویت و دست کاریه.

us1234
دوشنبه 03 اسفند 1394, 16:58 عصر
یکی از دلایل اینکه میگن روش get امنیتش پایین تر هست به خاطر اینه که وقتی رمز رو وارد کردید اون بالا توی آدرس بار نمایش داده میشه. و اگه کسی نمایشگر شما رو ببینه ....
مثلا اینطوری:

http://localhost/test.php?pass=1234


متد get تمام مقادیر وارد شده و ارسال شده را در نوار ادرس url مرورگر نمایش میده و امنیت پایینی نسبت به متد post داره...چون متد post فقط ادرس صفحه ی ارسال شده را در url نشون میده و اطلاعات دیگری را که ارسال کرده ایم نشان نمیدهد


در فایل test.php می توان یک هدر ریدارکت تعریف کرد که اگر پسورد درست نبود ریدارکت شود به همان صفحه قبلی و اگر درست بود به صفحه پنل کاربری ...

پس این سناریو که چون داخل url نمایش داده میشود ، امنتیش کم است منتفی است .

هر چند اصل مطلب که این 2 دوست بیان کردند اشتباه نیست ولی از نظر امنیت POST و GET هیچ مزایایی نسبت به هم ندارند .