سؤال

استخدمت العديد من تطبيقات ajax الخاصة بي في الماضي طلب GET ولكني الآن بدأت في استخدام طلب POST بدلاً من ذلك.يبدو أن طلبات POST أكثر أمانًا قليلاً وبالتأكيد أكثر ملاءمة/جمالًا لعناوين URL.وبالتالي، أنا أتساءل عما إذا كان هناك أي سبب لاستخدام طلب GET على الإطلاق.

هل كانت مفيدة؟

المحلول

عموما أنا طرحت السؤال على النحو التالي: هل يتغير أي شيء مهم بعد الطلب؟ (على الرغم من التسجيل وما شابه ذلك).إذا حدث ذلك، فيجب أن يكون طلب POST، وإذا لم يحدث ذلك، فيجب أن يكون طلب GET.

يسعدني أنك تسمي طلبات POST بأنها أكثر أمانًا "قليلاً"، لأن هذا هو ما هي عليه إلى حد كبير؛من السهل تزييف طلب POST من قبل المستخدم إلى الصفحة.ومع ذلك، فإن جعله طلب POST يمنع مسرعات الويب أو عمليات إعادة التحميل من إعادة تشغيل الإجراء عن طريق الخطأ.

كـ AJAX، هناك اعتبار آخر:إذا كنت ستعيد JSON مع دعم رد الاتصال، فاحرص بشدة على عدم وضع أي بيانات حساسة لا تريد أن تتمكن مواقع الويب الأخرى من رؤيتها هناك.كان لدى Wikipedia ثغرة أمنية على هذا المنوال حيث تم الكشف عن الرمز المميز للمستخدم المضاد لـ CSRF عبر JSON API.

نصائح أخرى

يجب عليك استخدام GET حيث تقوم بتنفيذ طلب ليس له أي آثار جانبية، على سبيل المثال.مجرد جلب بعض المعلومات.يمكن لهذا الطلب:

  • يتم التكرار دون أي مشكلة - إذا اكتشف المتصفح خطأ ما، فيمكنه إعادة المحاولة بصمت
  • قم بتخزين نتائجها مؤقتًا بواسطة المتصفح
  • يتم تخزينها مؤقتًا بواسطة وكيل

هذه الأشياء كلها جيدة.أي شيء يقوم فقط باسترداد البيانات (خاصة البيانات العامة) يجب أن يكون GET حقًا.يجب أن يرسل الخادم آخر تعديل معقول:وتنتهي:رؤوس للسماح بالتخزين المؤقت إذا لزم الأمر.

جميع النقاط الجيدة، ومع ذلك، في الإجابة على السؤال، تكون طلبات GET أكثر فائدة في سيناريوهات معينة مقارنة بطلبات POST:

  1. يمكن وضع إشارة مرجعية عليها
  2. يمكن تخزينها مؤقتًا
  3. إنهم أسرع
  4. لقد عرفوا عواقب (على افتراض أنهم لا يغيرون البيانات) ، لذا فإن زيارتها عدة مرات ليست مشكلة.

من أجل الأجيال القادمة، قم بتحديث هذا التعليق بملاحظات المدونة المتعلقة بما يلي:النقطة رقم 3 هنا، كل الفضل لعمر الزبير (مؤلف المقال المشار إليه). مشاركة مدونة):

"يقوم Atlas افتراضيًا بإجراء HTTP POST لجميع مكالمات AJAX.HTTP Post أغلى من GET HTTP.إنه ينقل المزيد من البايتات على السلك ، وبالتالي يأخذ وقت الشبكة الثمين ويجعل أيضًا ASP.NET يقوم بمعالجة إضافية على نهاية الخادم.لذلك ، يجب أن تستخدم HTTP الحصول على أكبر قدر ممكن.ومع ذلك ، لا يسمح لك HTTP GET بتمرير الكائنات كمعلمات.يمكنك تمرير الأرقام والسلسلة والتاريخ فقط.عندما تقوم بإجراء مكالمة HTTP ، يقوم Atlas بإنشاء عنوان URL المشفر ويجعل ضربة إلى عنوان URL هذا.لذلك ، يجب ألا تمرر الكثير من المحتوى مما يجعل عنوان URL أكبر من 2048 chars.على حد علمي ، هذا ما هو الحد الأقصى لأي عنوان URL.

شيء شرير آخر حول منشور http هو أنه في الواقع مكالمتان.يرسل المتصفح الأول رؤوس نشر HTTP ورد خادم مع "HTTP 100 Conter".عندما يستقبل المتصفح هذا، فإنه يرسل النص الفعلي."

وهذا قد تساعدك على تحديد مكان لاستخدام GET، وحيث لاستخدام وظيفة:

محددات، العنونة، واستخدام HTTP GET و POST .

وهناك فرق واحد آخر لم تذكر من قبل أي شخص.

يتم تمرير

وطلبات GET في سلسلة URL، وبالتالي تخضع لحدود طول تعتمد عادة على المتصفح.

وطلبات الوظائف يمكن أن يكون أكثر من اعظم بكثير - في الواقع لا يقتصر حقا. حتى إذا كنت تحتاج إلى طلب بيانات من خادم ويب وأنت تمر في الكثير من المعلومات المعلمة ثم طلب POST قد يكون الخيار الوحيد.

ولذا، وكما ذكرت من قبل طلب GET حقا هو لطلب البيانات (أي آثار جانبية) في حين يتم استخدام طلب POST عموما لنقل البيانات إلى الخادم ليتم تخزينها (مع آثار جانبية). مثلا استخدام آخر لتحميل ملف. الحصول على استرداد ملف.

وكان هناك وقت عندما IE أعتقد أن لديها سلسلة URL GET قصيرة جدا. بعض التطبيقات مثل الملاحظات لوتس استخدام أعداد كبيرة من أحرف عشوائية لتمثيل لمعرف مستند. كان لي استيائها من استخدام منتج آخر التي ولدت سلاسل عشوائية لذلك كان URL صفحة فريدة في كل مرة. وكانت سلسلة عشوائية ضخمة ... وأنها لا تعمل دائما مع IE6 من الذاكرة.

وطلبات الوظائف هي فقط غير آمنة كما يحصل. والفرق الرئيسي هو أن يستخدم POST لتعديل حالة تطبيق الملقم، في حين يحصل فقط تطلب البيانات منه.

والفرق الأمور عند استخدام نظيفة، وعناوين المواقع "مريحة"، حيث يحدد URL نفسها الموارد، وأساليب مختلفة تؤدي إجراءات مختلفة على جانب الملقم.

وربما الأهم من ذلك، عليه هو كتاب markable / عرض في عنوان التاريخ، والبحث مع جوجل.

والمنصب هو المهم حيث كنت لا <م> تريد هذا الحدث ليكون إشارة مرجعية أو قادرة على أن تكتب في ك URL - على خلاف ذلك لك (أو Google الزحف عناوين المواقع الخاصة بك) يمكن أن ينتهي به عن طريق الخطأ أشياء مثل حذف المستخدمين من النظام الخاص بك، على سبيل المثال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top