لماذا هو الحصول على طريقة أسرع من المشاركة في HTTP?

StackOverflow https://stackoverflow.com/questions/1211881

  •  06-07-2019
  •  | 
  •  

سؤال

أنا جديد في برمجة الويب و مجرد فضول أن أعرف عن الحصول على وظيفة طرق إرسال البيانات من صفحة واحدة إلى أخرى.

ويقال أن طريقة الحصول عليها هي أسرع من آخر ولكن أنا لا أعرف لماذا.سبب واحد يمكن أن تجد هي التي يمكن أن تأخذ فقط 255 حرفا ؟ هل هناك أي سبب آخر ؟ يرجى شخص يشرح لي.

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

المحلول

وانها ليست الكثير عن السرعة. هناك الكثير من الحالات التي المنصب هو أكثر قابلية للتطبيق. على سبيل المثال، سوف محركات البحث مؤشر الحصول على عناوين المواقع، ويمكن المتصفحات يحفظون لهم وجعلها تظهر في التاريخ. ونتيجة لذلك، إذا كنت تأخذ الإجراءات مثل تعديل DB بناء على طلب GET، فإنه قد يكون ضارا وبعض السير ويمكن أيضا اجتياز URL.

والحالة الأخرى يمكن أن يكون قضية أمنية. إذا قمت بنشر وثائق التفويض باستخدام GET، وأنها سوف تحصل المدرجة في تاريخ المتصفح وسجل خادم الملفات.

نصائح أخرى

وشيء آخر حول http: // بعد غير أنه يمكن أن يكون 2 المكالمات عند استخدام Expect: 100-Continue رأس HTTP. أول متصفح يرسل رؤوس http: // بعد والردود الخادم مع "HTTP 100 متابعة". عندما يتلقى متصفح هذا، فهو يرسل الجسم الفعلي.

http://omaralzabir.com/atlas_2__http_post_is_slower_and_it_s_default_in_atlas/

وأعتقد أن هذا هو الجواب أن مقدم البلاغ قد تبحث عنه.

وهناك العديد من المفاهيم الخاطئة حول GET و POST في HTTP. هناك اختلاف أساسي واحد، GET يجب idempotent في حين لم يكن لديك وظيفة أن يكون. ما يعنيه هذا هو أن يحصل يسبب أي آثار جانبية، أي يمكنني إرسال GET إلى تطبيق ويب عدة مرات كما أريد أن (اعتقد ضرب السيطرة + R أو F5 عدة مرات) وسوف تطلب أن يكون "آمنة"

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

وعلى GET الخادم مقابل المنصب هو اصطلاح محض، أي والامر متروك لي كمطور لضمان I رمز منصب على الخادم ل<م> لا أكرر الدعوة. هناك طرق مختلفة للقيام بذلك ولكن هذا سؤال آخر.

لالإجابة في الواقع مسألة إذا كنت تستخدم GET أو POST لأداء نفس المهمة لا يوجد فرق الأداء.

ويمكنك قراءة RFC ( http://www.w3.org/Protocols/ RFC2616 / rfc2616.html ) لمزيد من التفاصيل.

النظر في بروتوكول http ، وظيفة أو الحصول على وبالمثل ، ينبغي أن تكون سهلة وسريعة تحليل.يمكنني القول أنه لا يوجد الفارق في الأداء.

نلقي نظرة على الخام رؤوس HTTP

http GET

GET /index.html?userid=joe&password=guessme HTTP/1.1
Host: www.mysite.com
User-Agent: Mozilla/4.0

POST http

POST /login.jsp HTTP/1.1
Host: www.mysite.com
User-Agent: Mozilla/4.0
Content-Length: 27
Content-Type: application/x-www-form-urlencoded

userid=joe&password=guessme

من وجهة نظري الأداء ينبغي أخذها في الاعتبار عند مقارنة الحصول على وظيفة.

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

فقط بضعة سنتات من عام 2016.

أنا خلق رسالة بسيطة النظام.في البداية لم تستخدم بعد تلقي تنبيهات جديدة.في مسج كان:

$.post('/a/alerts', 'stamp=' + STAMP, function(result)
{
});

و في PHP اعتدت $_POST['ختم'].حتى من localhost لدي 90-100 ms كل طلب من هذا القبيل.أنا ببساطة تغيير:

$.get('/a/alerts?stamp=' + STAMP, function(result)
{
});

و في PHP تحولت إلى $_GET['ختم'].حتى أقل قليلا من 1 دقيقة من التغييرات.الآن كل طلب يأخذ 30-40 ms.

لذلك على أن تكون أسرع مرتين من بعد.طبعا ليس دائما ولكن كميات صغيرة من البيانات يمكنني الحصول على نفس النتائج في كل وقت.

الحصول على هو أسرع قليلا لأن القيم هي التي أرسلت في رأس على عكس بعد القيم هي التي أرسلت في طلب الجسم, في شكل نوع المحتوى يحدد.

عادة نوع محتوى التطبيق/x-www-form-urlencoded ، لذلك يطلب الجسم يستخدم نفس شكل سلسلة الاستعلام:

المعلمة=قيمة أيضا=آخر عند استخدام ملف تحميل في شكل استخدام multipart/form-ترميز البيانات بدلا من ذلك ، والتي لديها شكل مختلف.انها أكثر تعقيدا.

وأنا أتفق مع إجابات أخرى، ولكن لم يذكر أن طلبات GET يمكن أن يكون مؤقتا في حين أن طلبات POST مؤقتا أبدا. وأعتقد أن هذا هو السبب الرئيسي لبعض طلب GET التي يتم تنفيذها بشكل أسرع. (وهذا يعني من خشن أنه في بعض الأحيان يتم إرسال أي طلب في الواقع وبالتالي انها ليست في الواقع طلب GET وهو أسرع، ولكن مخبأ المتصفح الخاص بك.)

وHTTP طرق: GET مقابل وظيفة: http://www.w3schools.com/tags/ ref_httpmethods.asp

سوف

وظيفة تنمو رؤوس الخاص بك أكثر، فقط مما يجعلها أكبر، ولكن الفرق يجب أن تكون ضئيلة جدا، لذلك أنا لا أرى لماذا ينبغي أن يكون هذا مصدر قلق.

وفقط نضع في اعتبارنا أن الطريقة الصحيحة للتحدث HTTP هو استخدام الحصول فقط على الإجراءات وظيفة للبيانات. لم يكن لديك ل، ولكنك أيضا لا تريد أن يكون لها حال السير جوجل يمكن، على سبيل المثال، إدراج، حذف أو التلاعب البيانات التي كان من المفترض فقط لبشر أن التعامل ببساطة لأنه يتبع الروابط يجدها .

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