PDA

View Full Version : مزیت get



esmahdi
دوشنبه 11 مهر 1390, 16:27 عصر
با سلام
آیا ارسال اطلاعات به روش get مزیتی هم نسبت به post داره؟
تو برنامه های معروف معمولا برای چه جاهایی از get استفاده می شود؟
با تشکر

pariya_1988
دوشنبه 11 مهر 1390, 17:45 عصر
خیر!اکثر برنامه نویسا از متد post استفاده میکنن چون محدودیت کمتری در مقابل get داره و get مزایای خاصی نداره

pariya_1988
دوشنبه 11 مهر 1390, 17:46 عصر
راستی یک سری به سایت چهارسو بزن.کمکت میکنه!

hjran abdpor
دوشنبه 11 مهر 1390, 17:50 عصر
get معمولا در خواست ها را براساس یک سری کاراکتر میفرسته که فکر کنم محدود به 104 کارکتر است البته دقیقا نمیدونم چند کاراکتر است واین خودش یه عیبی بزرگ محسوب میشه .

esmahdi
دوشنبه 11 مهر 1390, 18:06 عصر
خیلی ممنون از دوستان
ولی ماجرای این سایت چهار سو که دوستمون pariya_1988 گفت چیه؟

blackmak
دوشنبه 11 مهر 1390, 22:38 عصر
ببینید بر خلاف دوستان بهتره ببینیم هر کدام از متد های get و post چه جایگاهی در برنامه نویسی و چه استفاده ای دارند.
متد post وقتی استفاده میشه که شما میخواهید تغییری سمت سرور بوجود بیارید مثل update , delete و ... یعنی عملیات شما باید به صورت امن انجام بشه. مثل login یا register یا ریختن text به database (چون همان طور که دوستمون گفت کاراکتر ها محدود هستند در متد get )
اما متد get وقتی استفاده میشه که شما میخوای چیزی از server بخونی مثلا خبر ، مقاله و .. و مزیتش تو این مورد اینه که شما میتونی یه مطلبو به صورت مستقیم روی یه وبسایت پیدا کنی مثلا:

این url قابلیت ابنو داره که شما دخیرش کنی و بعد به همون صفحه دسترسی داشته باشی که با متد get هستش.

http://www.domain.com/news.php?id=2324

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

http://www.domain.com/news.php

در کل هر کدوم استفاده و معایب و مزایای خدوشونو دارن
موفق باشید

idocsidocs
سه شنبه 12 مهر 1390, 15:57 عصر
من با نظر دوستمون blackmak موافقم. باید ببینید که چه نیازی دارین.

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

توی فریم ورکها که همه سایت رو با یه اسکریپت بالا می یارن (یه سایت بزرگ فقط یه اسکریپت پردازنده پی اچ پی داره) وظیفه پیدا کردن صفحه مورد نظر بر عهده آرایه گت هست.

آرایه پست هم برای ارسال فرم بکار می ره.

رضا قربانی
سه شنبه 12 مهر 1390, 16:47 عصر
امنیت get هم پایین تره نسبت به post .
ولی اگر در کل حساب کنید باید امنیت هر دوشون رو با کد نویسی حفظ کنید و از هر دوشون هم در زمان های خاص استفاده می شه .

esmahdi
سه شنبه 12 مهر 1390, 17:34 عصر
سلام
خیلی ممنون از پیگیری و جواب دوستان
مطالبی که گفته شد شاید جواب سوال من رو کامل نداد. من می گم شاید تابع get مثلا سرعت بالاتری داشته باشه به خاطر همین تو مواردی که نیازی به امنیت نداریم مثلا آدرس صفحه بهتر باشه از get استفاده کنیم.
نظر خودم اینه که شاید استفاده از get سریعتر باشه و یه جورایی چون مطالب رو تو آدرس بار چاپ می کنه شاید (شاید ها متخصصا باید بگن) برای seo هم یه جورایی مفید باشه!
من seo نظر خودمه. نمی دونم درسته یا نه اساتید باید بگن.
یعنی استفاده از تابع get به نظر من یه جاهایی شاید مزیت هم به حساب بیاد.

رضا قربانی
سه شنبه 12 مهر 1390, 18:00 عصر
سلام
خیلی ممنون از پیگیری و جواب دوستان
مطالبی که گفته شد شاید جواب سوال من رو کامل نداد. من می گم شاید تابع get مثلا سرعت بالاتری داشته باشه به خاطر همین تو مواردی که نیازی به امنیت نداریم مثلا آدرس صفحه بهتر باشه از get استفاده کنیم.
نظر خودم اینه که شاید استفاده از get سریعتر باشه و یه جورایی چون مطالب رو تو آدرس بار چاپ می کنه شاید (شاید ها متخصصا باید بگن) برای seo هم یه جورایی مفید باشه!
من seo نظر خودمه. نمی دونم درسته یا نه اساتید باید بگن.
یعنی استفاده از تابع get به نظر من یه جاهایی شاید مزیت هم به حساب بیاد.

100% برای S E O تاثیر داره . یه مثال ساده : آدرس تاپیک های همین انجمن رو نیگاه کن .

esmahdi
سه شنبه 12 مهر 1390, 22:01 عصر
خیلی ممنون تا حدودی جواب سوالم رو گرفتم
حالا سرعت چی
از لحاظ سرعت این دو تا فرق ندارن؟

A B C D
سه شنبه 12 مهر 1390, 23:25 عصر
بنظرم سرعت فرق خاصی نداره.
اگر بار رو بذاری عقب وانت یا بذاری روی صندلی جلوش تفاوتی میکنه؟

esmahdi
چهارشنبه 13 مهر 1390, 01:02 صبح
بستگی داره بارت چی باشه خوب
ممکنه مثلا بارت گوسفند باشه از بس بو می ده سریع تر می ری سریع تر می رسی :متفکر:
شاید این مساله در مورد post و get هم صدق بکنه:چشمک:
من که دنبال جوابش هستم
بازم ممنون از همه دوستان

A B C D
چهارشنبه 13 مهر 1390, 01:32 صبح
متد GET موقع برنامه نویسی و تست و تغییر واضحتر و راحتتره، واسه همین خودم ترجیح میدم از GET استفاده کنم. البته بحث ارسال فرمها که تفاوت میکنه، چون در اون موارد بهرحال مجبوری تگها و ساختار فرم رو ایجاد کنی و بنابراین بخش عمده ای از زحمتی رو که استفاده از متد POST داره بهرصورت انجام دادی.

استفاده از متد GET به سادگی نوشتن یک لینک هست که نهایتا با متصل کردن چنتا رشته و متغییر ایجاد میشه، اما برای متد POST باید یک فرم در صفحه ایجاد کنید که تگها و جزییات بیشتری داره و بعضی وقتا باید از جاوااسکریپت هم برای سابمیت کردنش استفاده کرد.

درکل هرچیزی هرچی ساده تر باشه بهتره. و خب گت یه چیزی ساده تر از پست است.
هرچی پیچیدگی زیاد میشه پارامترهای منفی هم زیاد و محتمل تر میشن. باگها زیاد میشه، پیش نیازها و وابستگی ها زیاد میشه (مثلا وابستگی به جاوااسکریپت)، نگهداری برنامه سخت تره میشه چون حجیم تر و پیچیده تر شده،... .

اما پروتکل HTTP چی میگه. میگه کجا از GET و کجا از POST استفاده کنیم.


9.1.1 Safe Methods



Implementors should be aware that the software represents the user in
their interactions over the Internet, and should be careful to allow
the user to be aware of any actions they might take which may have an
unexpected significance to themselves or others.

In particular, the convention has been established that the GET and
HEAD methods SHOULD NOT have the significance of taking an action
other than retrieval. These methods ought to be considered "safe".
This allows user agents to represent other methods, such as POST, PUT
and DELETE, in a special way, so that the user is made aware of the
fact that a possibly unsafe action is being requested.

Naturally, it is not possible to ensure that the server does not
generate side-effects as a result of performing a GET request; in
fact, some dynamic resources consider that a feature. The important
distinction here is that the user did not request the side-effects,
so therefore cannot be held accountable for them.


اونطور که بنده ترجمه و تفسیر میکنم، میگه متد GET یه متد امن (Safe) بحساب میاد. یعنی باید عملیاتی رو باهاش انجام بدید که اگر کاربر از نتیجهء اون مطلع نبود و سهوا هم انجام داد مشکل خاصی پیش نیاد.
بنابراین نتیجه میگیریم که فرضا دستور ثبت نهایی یه خرید اینترنتی نباید با استفاده از متد GET انجام بشه (فرضا با کلیک روی یک لینک معمولی انجام نشه). یا نباید کاربر روی یک لینک کلیک کنه (یا حتی اون لینک توسط جاوااسکریپت اجرا بشه) و در نتیجه یک فایل یا رکورد که بی اهمیت نیست از سرور حذف بشه. اما اینطور که در بخش آخر گفته، اگر اون تغییر جانبی (حذفی یا هرچیزی که هست) برای کاربر چیز مهمی نباشه و نباید حتما کاربر از ماهیت و اهمیت اون عملیات مطلع باشه، میشه از متد GET استفاده کرد.
البته فکر نمیکنم مجبور باشیم در این موارد حتما از GET استفاده کنیم و نتونیم از POST استفاده کنیم. ولی فکر میکنم در بیشتر یا خیلی موارد طبیعتا بخاطر سادگی، خوانایی، SEO، و مزایای دیگری که متد GET داره از اون استفاده میکنیم. مگر اینکه اطلاعات امنیتی باشه، حجمش زیاد باشه و دلایل دیگری در هر مورد خاص.

روبات ها معمولا به همین خاطر از متد POST استفاده نمیکنن (البته اگر آدم باشن! چون بعضیاشون این کار رو میکنن).
اگر شما از متد GET برای یک کار مهم استفاده کنید ممکنه یه روزی یه طوری اون لینک توسط یک روبات یا برنامه ای حتی چندبار به تعداد نامعینی اجرا بشه و اونوقت خسارت و مشکلات غیرعمدی پیش بیاد.
اما اگر از متد POST استفاده کنید دیگه احتمالش خیلی کم میشه که یه روبات یا برنامه اون عملیات رو بصورت ناخواسته/سرخود انجام بده.
اینه که مشاهده میکنید چطور پیروی از استانداردها و توصیه ها حتی بخاطر چیزهایی که ازشون اطلاع نداریم یا به ذهنمون نمیرسن و یا در آینده ممکنه پیش بیان مهمه و در کم شدن مشکلات و هزینه های کلی همگان درکل مفیده.


بعد یه قضیه مشابه دیگه هست بنام idempotence.

9.1.2 Idempotent Methods



Methods can also have the property of "idempotence" in that (aside
from error or expiration issues) the side-effects of N > 0 identical
requests is the same as for a single request. The methods GET, HEAD,
PUT and DELETE share this property. Also, the methods OPTIONS and
TRACE SHOULD NOT have side effects, and so are inherently idempotent.

However, it is possible that a sequence of several requests is non-
idempotent, even if all of the methods executed in that sequence are
idempotent. (A sequence is idempotent if a single execution of the
entire sequence always yields a result that is not changed by a
reexecution of all, or part, of that sequence.) For example, a
sequence is non-idempotent if its result depends on a value that is
later modified in the same sequence.

A sequence that never has side effects is idempotent, by definition
(provided that no concurrent operations are being executed on the
same set of resources).


این یخورده آدم رو گیج میکنه. چون شباهت و ارتباطش و تفاوتش با بحث امن بودن یک متد یه مقدار مبهم و پیچیده هست.
خب بهرحال این یکی میگه متد GET باید Idempotent باشه. یعنی ارسال یک درخواست گت یکسان اگر چند بار انجام بشه نباید با ارسال یک درخواست تفاوت بکنه.
ولی مند POST میتونه برای مواردی که تعداد ارسال یک درخواست اهمیت داره استفاده بشه.
این بطور مثال چه معنی ای میده؛ فرضا اگر شما از متد GET برای عملیات خاصی استفاده کنید، یک برنامه ممکنه اگر در بار اول موفق به دریافت پاسخ این درخواست نشه، درخواست رو خودش دوباره بصورت خودکار اجرا کنه. چون میتونه فرض کنه که اجرای دوبارهء این درخواست خطری نداره و مجاز است.
حالا چه مثالی برای این بنظرم میرسه که یک مورد درحالیکه امن حساب میشه اما Idempotent نباشه. یعنی اجرای یک بار اون بی خطره اما نباید سرخود چندبار تکرار بشه.
مثلا یه درخواست GET که باعث درج رکورد خاصی میشه (که این عملیات مهم نیست، وگرنه نباید از گت استفاده میکردیم)، اما هر بار که اون درخواست تکرار بشه یک کورد جدید ایجاد میشه و احتمالا فکر میکنم ایجاد شدن اون رکورد جدید باید معنای خاصی داشته باشه، نه اینکه یک کورد یکسان باشه که بود و نبودش عملا فرقی نمیکنه.
حالا مثال عملی این رو به خودتون میسپارم چون الان به ذهن خودم نمیرسه. ببینید یه مثال عملی خوب اگر پیدا کردید بگید.