XMLHttpRequest
XMLHttpRequest ( XHR ) هي واجهة برمجة تطبيقات (API) على شكل كائن جافا سكريبت ، تقوم وظائفها بنقلطلبات HTTP من متصفح الويب إلى خادم الويب . [ 1 ] تسمح هذه الوظائف لتطبيقات المتصفح بإرسال طلبات إلى الخادم بعد اكتمال تحميل الصفحة، واستلام المعلومات منه. [ 2 ] تُعد XMLHttpRequest أحد مكونات برمجة Ajax . قبل Ajax، كانت الروابط التشعبية وإرسال النماذج الآليات الرئيسية للتفاعل مع الخادم، وغالبًا ما كانت هذه الطرق تستبدل الصفحة الحالية بصفحة أخرى. [ 2 ]
تاريخ
طُورت الفكرة الكامنة وراء هذه الميزة XMLHttpRequestعام 2000 من قِبل مطوري برنامج مايكروسوفت أوتلوك . [ 3 ] ثم طُبقت هذه الفكرة في متصفح إنترنت إكسبلورر 5 (1999). مع ذلك، لم تستخدم الصيغة الأصلية XMLHttpRequestالمعرّف . بدلاً من ذلك، استخدم المطورون المعرّفين ActiveXObject("Msxml2.XMLHTTP")و ActiveXObject("Microsoft.XMLHTTP"). [ 4 ] اعتبارًا من إنترنت إكسبلورر 7 (2006)، تدعم جميع المتصفحات XMLHttpRequestالمعرّف . [ 4 ]
XMLHttpRequestأصبح المعرّف الآن المعيار الفعلي في جميع المتصفحات الرئيسية، بما في ذلك محرك تخطيط Gecko من موزيلا (2002)، [ 5 ] وسفاري 1.2 (2004) وأوبرا 8.0 (2005). [ 6 ]
المعايير
نشر اتحاد شبكة الويب العالمية ( W3C) مسودة مواصفات للكائن XMLHttpRequestفي 5 أبريل 2006. [ 7 ] [ أ ] وفي 25 فبراير 2008، نشر الاتحاد مسودة مواصفات المستوى الثاني . [ 8 ] أضاف المستوى الثاني طرقًا لمراقبة تقدم الأحداث، والسماح بطلبات المواقع المتعددة، ومعالجة تدفقات البايت. وفي نهاية عام 2011، دُمجت مواصفات المستوى الثاني في المواصفات الأصلية. [ 9 ]
في نهاية عام 2012، تولت مجموعة عمل WHATWG عملية التطوير وتحافظ على وثيقة حية باستخدام Web IDL . [ 10 ]
الاستخدام
مثال في TypeScript . [ 11 ]
// إنشاء كائن XMLHttpRequest const xhr = new XMLHttpRequest ();// تهيئة الطلب: طريقة GET، عنوان URL، علامة Async (صحيح) تجعل البرنامج النصي لا يتوقف أثناء انتظار الاستجابة xhr.open ( ' GET' , 'https://example.com' , true );// تعيين مستمعي الأحداثxhr.onload = () = > { // تم تنفيذ الطلب. سجل رمز حالة الاستجابة ونصها console.log ( xhr.status , xhr.responseText ) ; } ;xhr.onerror = () => { console.log ( ' حدث خطأ في الشبكة ' ) ; } ;// إرسال الطلب xhr.send ();إلى جانب هذه الخطوات العامة، XMLHttpRequestيوفر النظام خيارات عديدة للتحكم في كيفية إرسال الطلب ومعالجة الاستجابة. يمكن إضافة حقول رأس مخصصة إلى الطلب لتحديد كيفية تنفيذه من قِبل الخادم، [ 12 ] كما يمكن تحميل البيانات إلى الخادم من خلال تضمينها في استدعاء "send". [ 13 ] يمكن تحليل الاستجابة من تنسيق JSON إلى كائن JavaScript جاهز للاستخدام، أو معالجتها تدريجيًا فور وصولها بدلًا من انتظار النص الكامل. [ 14 ] يمكن إيقاف الطلب قبل الأوان [ 15 ] أو ضبطه على الفشل إذا لم يكتمل خلال فترة زمنية محددة. [ 16 ]
طلبات النطاقات المتعددة
في المراحل الأولى لتطوير شبكة الإنترنت العالمية ، تبيّن إمكانية اختراق أمن المستخدمين باستخدام جافا سكريبت لتبادل المعلومات بين مواقع الويب المختلفة الأقل موثوقية. ولذلك، تُطبّق جميع المتصفحات الحديثة سياسة المصدر نفسه التي تمنع العديد من هذه الهجمات، مثل هجمات البرمجة النصية عبر المواقع . XMLHttpRequestتخضع البيانات لهذه السياسة الأمنية، ولكن في بعض الأحيان يلجأ مطورو الويب إلى التحايل على قيودها عمدًا. ويعود ذلك أحيانًا إلى الاستخدام المشروع للنطاقات الفرعية، فعلى سبيل المثال، إنشاء رابط XMLHttpRequestمن صفحة أنشأها موقع ويب آخر foo.example.comللحصول على معلومات من bar.example.comموقع ويب آخر سيفشل عادةً.
توجد بدائل متعددة لتجاوز هذه الميزة الأمنية، بما في ذلك استخدام JSONP ، ومشاركة الموارد عبر النطاقات (CORS)، أو بدائل أخرى باستخدام إضافات مثل Flash أو Silverlight (وكلاهما أصبح الآن غير مدعوم). تم تحديد XMLHttpRequest عبر النطاقات في XMLHttpRequestمواصفات المستوى 2 الصادرة عن W3C. [ 17 ] لم يُفعّل متصفح Internet Explorer ميزة CORS إلا في الإصدار 10. وقدّم الإصداران السابقان (8 و9) وظائف مماثلة من خلال واجهة برمجة تطبيقات XDomainRequest (XDR). يدعم الآن جميع المتصفحات الحديثة (على أجهزة سطح المكتب والهواتف المحمولة) ميزة CORS. [ 18 ]
يفرض بروتوكول CORS عدة قيود، مع نموذجين للدعم. لا يسمح النموذج البسيط بتعيين رؤوس طلبات مخصصة، كما أنه لا يدعم ملفات تعريف الارتباط . علاوة على ذلك، لا يدعم سوى طرق الطلب HEAD وGET وPOST ، ويقتصر POST على أنواع MIME التالية : "text/plain" و"application/x-www-urlencoded" و" multipart/form-data ". في البداية، كان "text/plain" هو النوع الوحيد المدعوم. [ 19 ] أما النموذج الآخر، فيكتشف طلب إحدى الميزات غير البسيطة ، ويرسل طلبًا تمهيديًا [ 20 ] إلى الخادم للتفاوض بشأن هذه الميزة.
جلب بديل
قد يُسبب استخدام ردود استدعاء XHR غير المتزامنة في تدفق البرنامج صعوبةً في سهولة القراءة والصيانة. أضافت ECMAScript 2015 (ES6) بنية الوعد (promise ) لتبسيط المنطق غير المتزامن. ومنذ ذلك الحين، طبّقت المتصفحات fetch()واجهةً بديلةً لتحقيق نفس وظائف XHR باستخدام الوعود بدلاً من ردود الاستدعاء.
تم توحيد معيار Fetch أيضًا بواسطة WHATWG. [ 21 ]
مثال
fetch ( '/api/message' ) . then (( response : Response ) => { if ( response.status ! == 200 ) { throw new Error ( ' فشل الطلب' ); } return response.text ( ); } ) . then (( text : string ) = > { console.log ( text ) ; }) . catch (( error : Error ) = > { console.error ( error.message ) ; } ) ;انظر أيضاً
مراجع
- ↑ ماهيموف، مايكل (2007). أنماط تصميم أجاكس . أورايلي. ص 92. ISBN 978-0-596-10180-0تفتقر لغة جافا
سكريبت إلى آلية محمولة للاتصال الشبكي العام. ... ولكن بفضل كائن XMLHttpRequest، ... يمكن لرمز جافا سكريبت إجراء استدعاءات HTTP إلى الخادم الأصلي.
- 1 2 ماهيموف، مايكل (2006). أنماط تصميم أجاكس . أورايلي. ص 92. ISBN 978-0-596-10180-0.
- ↑ "مقال عن تاريخ XMLHTTP بقلم أحد المطورين الأصليين" . Alexhopmann.com. 31 يناير 2007. مؤرشف من الأصل في 30 يناير 2009. تم الاطلاع عليه في 14 يوليو 2009. في
الواقع، يبدو أن بنية عميل Gmail تتبع التصميم العام لتطبيق Exchange 2000 لبرنامج Outlook Web Access لمتصفح IE5 والإصدارات الأحدث، والذي تم إصداره في عام 2000.
- 1 2 ماهيموف، مايكل (2006). أنماط تصميم أجاكس . أورايلي. ص 93. ISBN 978-0-596-10180-0.
- ↑ "خبر مؤرشف من موزيلازين يُعلن تاريخ إصدار سفاري 1.2" . Weblogs.mozillazine.org. مؤرشف من الأصل بتاريخ 2009-06-02 . تم الاطلاع عليه بتاريخ 2009-07-14 .
- ↑ "بيان صحفي يُعلن تاريخ إصدار Opera 8.0 من موقع Opera الإلكتروني" . Opera.com. 19 أبريل 2005. تاريخ الاطلاع: 14 يوليو 2009 .
- ↑ "مواصفات كائن XMLHttpRequest من مسودة عمل المستوى 1 الصادرة عن اتحاد شبكة الويب العالمية (W3C) بتاريخ 5 أبريل 2006" . W3.org . تاريخ الاسترجاع: 14 يوليو 2009 .
- ↑ "مواصفات كائن XMLHttpRequest من مسودة عمل المستوى 2 الصادرة عن اتحاد شبكة الويب العالمية (W3C) بتاريخ 25 فبراير 2008" . W3.org . تاريخ الاسترجاع: 14 يوليو 2009 .
- ↑ "مسودة محرر XMLHttpRequest، 5 ديسمبر 2011" . w3.org . تم الاطلاع عليه في 5 ديسمبر 2011 .
- ^ فان كيسترين ، آن (19 فبراير 2024). XMLHttpRequest مستوى المعيشة (تقرير) . تم الاسترجاع بتاريخ 2024-04-09 .
- ↑ هولدنر، أنتوني تي. الثالث (2008). أياكس: الدليل الشامل . الصفحات 70-71 ، 76.
- ^ فان كيسترن 2024 ، 3.5.2.
- ^ فان كيسترن 2024 ، 3.5.6.
- ^ فان كيستيرن 2024 ، 3.6.9.
- ^ فان كيستيرن 2024 ، 3.5.7.
- ^ فان كيسترن 2024 ، 3.5.3.
- ↑ "XMLHttpRequest المستوى 2" . تم الاطلاع عليه بتاريخ 14-11-2013 .
- ↑ "هل يمكنني استخدام مشاركة الموارد عبر المصادر؟" . تم الاطلاع عليه بتاريخ 14-11-2013 .
- ↑ "XDomainRequest - القيود والمحددات والحلول البديلة" . تم الاطلاع عليه بتاريخ 14-11-2013 .
- ↑ "7.1.5 طلب من مصادر مختلفة مع فحص مسبق" . تم الاطلاع عليه بتاريخ 25-04-2014 .
- ↑ "جلب قياسي" .
ملحوظات
- ↑ تم تحرير المعياربواسطة آن فان كيستيرين من شركة أوبرا سوفتوير ودين جاكسون من اتحاد شبكة الويب العالمية (W3C).
روابط خارجية
- XML
- واجهات برمجة تطبيقات مايكروسوفت
- مبادرات مايكروسوفت
- جافا سكريبت
- عملاء بروتوكول نقل النص التشعبي
- أجاكس (برمجة)
- معايير الويب
- برنامج 2000
