طريقة طلب HTTP المحددة في بروتوكول HTTP/1.1 هي الخيارات ، الحصول على ، رأس ، نشر ، وضع ، حذف ، تتبع ، الاتصال. من بينها ، يتم استخدام Post بشكل عام لإرسال البيانات إلى الخادم.
نحن نعلم أن بروتوكول HTTP ينتقل بواسطة رمز ASCII ، ومواصفات طبقة التطبيق بناءً على بروتوكول TCP/IP. تقسم المواصفات طلبات HTTP إلى ثلاثة أجزاء: خط الحالة ، والطلب ، وموضوع الرسالة. على غرار ما يلي:
<EmoD> <repkest-url> <isise> <headers> <intity-body> </nictity-body> </ > </telect>
تنص الاتفاقية على أنه يجب وضع البيانات المقدمة من المنشور في الجسم والجسم ، لكن الاتفاقية لا تحدد ما يجب استخدام البيانات. في الواقع ، يمكن للمطورين تحديد تنسيق موضوع الرسالة بأنفسهم.
ومع ذلك ، إذا تم إرسال البيانات ، فمن المجدي أن تكون ناجحًا في الخادم. قامت لغة الخادم العامة مثل Java وإطار عملها ببناء وظائف للتحليل التلقائي لتنسيقات البيانات الشائعة. عادة ما يتم تعلم الخادم من حقل نوع المحتوى في رأس الطلب لمعرفة كيفية ترميز موضوع الرسالة في الطلب في الطلب ، ثم يحلل الموضوع. لذلك عندما يتعلق الأمر بنشر مخططات البيانات المقدمة ، فإنه يحتوي على جزأين: نوع المحتوى وترميز موضوع الرسائل. فيما يلي مقدمة رسمية لهم.
التطبيق/x-www-form-urlencodedيجب أن تكون هذه هي الطريقة الأكثر شيوعًا لتقديم البيانات. إذا لم يتم تعيين نماذج النموذج الأصلي للمستعرض ، إذا لم يتم تعيين سمة enctype ، فسيتم إرسال البيانات عن طريق التطبيق/X-WWW-Form-urlencoded. الطلب مشابه لما يلي (تم حذف رأس الطلب غير ذي صلة في هذه المقالة):
post http://www.example.com http/1.1-content-type: application/x-www-forlem-urlencoded ؛ 5B ٪ 5D = 3
بادئ ذي بدء ، يتم تحديد نوع المحتوى على أنه تطبيق/X-WWW-Form-urlencoded ؛ معظم لغات الخادم لديها دعم جيد لهذه الطريقة. على سبيل المثال ، في PHP ، يمكن لـ Post [′ ′] الحصول على قيمة العنوان.
في كثير من الأحيان ، عندما نقدم البيانات مع Ajax ، نستخدم هذه الطريقة أيضًا. على سبيل المثال ، jquery's Ajax ، القيمة الافتراضية لـ Content-type هي "Application/X-WWW-Form-urlencoded ؛ charset = utf-8".
multipart/form-dataهذه طريقة شائعة أخرى لنشر البيانات. عندما نقوم بتحميل الملفات باستخدام النماذج ، يجب أن نجعل النموذج مساوياً لهذه القيمة. تعال مباشرة إلى مثال على الطلب:
post http://www.example.com http/1.1-content-type: multipart/form-data ؛ --- webkitformboundaryrgkby7qhfd3trwacontent-disposition: name-data ؛
هذا المثال معقد بعض الشيء. بادئ ذي بدء ، يتم استخدام الحدود لتقسيم الحقول المختلفة. ثم يشير نوع المحتوى إلى أن البيانات مشفرة بواسطة mutipart/data ، ما هو الحدود المطلوبة هذه المرة. ينقسم موضوع الرسالة إلى أجزاء مماثلة مع بنية مماثلة وفقًا لعدد الأقسام. ). إذا تم نقل الملف ، فإنه يحتوي أيضًا على معلومات اسم الملف ونوع الملف. انتهى موضوع الرسالة أخيرًا بـ-إلى الحدود. للحصول على تعريفات مفصلة لـ mutipart/form-data ، يرجى الانتقال إلى RFC1867 لعرضها.
يتم استخدام هذه الطريقة عمومًا لتحميل الملفات ، ولغة الخادم الرئيسية أيضًا لديها دعم جيد لها.
إن طريقتان البيانات المذكورة أعلاه هما الدعم الأصلي للمتصفحات ، وتدعم أشكال النماذج الأصلية هاتين الطريقتين فقط في هذه المرحلة. ومع ذلك ، نظرًا لأن المزيد والمزيد من مواقع الويب ، وخاصة WebApp ، تستخدم جميعها AJAX لتفاعل البيانات ، يمكننا تحديد طرق تقديم البيانات الجديدة تمامًا لجلب المزيد من الراحة للتنمية.
التطبيق/JSONالتطبيق/JSON ، نوع المحتوى ، ليس بالتأكيد غير مألوف برأس الاستجابة. في الواقع ، يستخدمه المزيد والمزيد من الأشخاص الآن كرئيس طلب لإخبار رسالة الخادم بأن الهيئة الرئيسية هي سلسلة JSON المسلسل. نظرًا لشعبية مواصفات JSON ، فإن المتصفحات الرئيسية باستثناء الانعكاس المنخفض IE هي الأصلية لـ JSON.Stringify ، ولغة الخادم أيضًا وظيفة للتعامل مع JSON ، ولن تواجه JSON أي مشكلة.
يدعم تنسيق JSON البيانات المنظمة أكثر تعقيدًا من القيم الرئيسية ، وهو أمر مفيد أيضًا. أتذكر عندما قمت بمشروع قبل بضع سنوات ، كان مستوى البيانات الذي كنت بحاجة إلى تقديمه عميقًا للغاية. ومع ذلك ، في ذلك الوقت ، استخدمت سلسلة JSON كقيمة ، وكنت ما زلت أضعها في زوج القيمة الرئيسية ، وأرسلتها في x-www-form-urlencoded.
تتمثل وظيفة Ajax في AngularJs من Google في إرسال سلسلة JSON افتراضيًا. على سبيل المثال ، الكود التالي:
var data = {'title': 'test' ، 'sub': [1،2،3]} ؛
الطلب النهائي هو:
post http://www.example.com http/1.1-content-type: application/json ؛
يمكن لهذا المخطط تقديم بيانات منظمة معقدة بسهولة ، وخاصة مناسبة للواجهة المريحة. ستعرض أدوات التغليف الرئيسية مثل أدوات المطورين الخاصة بـ Chrome و Firebug و Fiddler بيانات JSON بهيكل شجرة ، وهو ودود للغاية. ومع ذلك ، هناك أيضًا بعض اللغات التي لم تدعم هذه الطريقة. في هذا الوقت ، تحتاج إلى التعامل معها بنفسك: عندما يكون نوع المحتوى هو التطبيق/JSON في رأس الطلب ، والحصول على دفق الإدخال الأصلي من PHP: // الإدخال ، ثم JSON_DECODE. بدأت بعض أطر عمل Java.
بالطبع ، يمكن أيضًا تكوين AngularJS لإرسال البيانات باستخدام X-WWW-Form-urlencoded.
النص/xmlXML-RPC (استدعاء إجراءات XML عن بُعد). إنها مواصفات مكالمة عن بُعد باستخدام HTTP كبروتوكول نقل و XML كطريقة ترميز. طلب XML-RPC النموذجي هو: post http://www.example.com http/1.1-content-type: text/xml <!- /MethodName> <Params> <Param> <Value> <i4> 41 </i4> </Value> </Params> </MethodCall>
XML-RPC 协议简单、功能够用,各种语言的实现都有。 كما أنه يستخدم على نطاق واسع ، مثل واجهة برمجة تطبيقات XML-RPC من WordPress ، وخدمة Ping لمحرك البحث ، وما إلى ذلك. في JavaScript ، هناك أيضًا مكتبة جاهزة لدعم تفاعل البيانات بهذه الطريقة ، والتي يمكن أن تدعم خدمات XML-RPC الحالية. ومع ذلك ، أعتقد شخصياً أن بنية XML لا تزال متضخمة للغاية.