Az XMLHttpRequest (XHR) egy API, ami böngészőkön belül elérhető olyan interpreteres nyelvben, mint például a JavaScript. Arra használható, hogy HTTP vagy HTTPS protokollon keresztül direkt küldjünk kéréseket egy webszerverhez, aztán majd annak a válaszát közvetlenül visszakapjuk például a kérő szkriptben. Fejlesztői változatban minden fontosabb böngésző támogatja URI sémákat HTTP vagy HTTPS protokollon keresztül. A visszaküldött adat, amelyet a szervertől kapunk vissza lehet JSON, XML, HTML, vagy egyszerű szöveg. A visszakapott adat közvetlenül használható arra, hogy a böngészőben az aktív weboldal tartalmát módosítsuk, az oldal újratöltése nélkül, az aktív oldalhoz tartozó DOM szerkesztésével. A visszakapott adat egyből kiértékelhető kliens oldalon lévő szkripttel, például a JSON formátumú válasz, ami nagyon egyszerűen átkonvertálható a kliens oldalon lévő szkript által használt adat objektummá. XMLHttpRequestnek nagyon fontos szerepe van az Ajax web fejlesztési technikában. Jelenleg több weboldal is használja ezt a fajta technikát, annak érdekében, hogy minél használhatóbbak illetve, minél gyorsabban letölthetőek legyenek az adott oldalak. Több neves weboldal is létezik már, amelyek felhasználják ezt a technológiát, pl.: Gmail, Google Maps, Facebook és sokan mások.
Története Az "XMLHttpRequest" objektumot eredetileg a Microsoft Outlook Web Access fejlesztői alkották meg Microsoft Exchange Server 2000-hez. Az API-t "IXMLHTTPRequest"-nek nevezték el, és azt a koncepciót az MSXML második verziójában implementálták. Ezt a verziót 1999 márciusában a Internet Explorer 5.0-val adták ki. Engedélyezték a használatát az ActiveX-nek, amin belül IXMLHTTPRequest interfész az MSXML 'XMLHTTP wrapper-én keresztül volt használható.
A Mozilla projekt is alkalmazta ezt az interfészt, amelyet "nsIXMLHttpRequest"-nek neveztek el, a Gecko böngésző motorban. Amennyire csak lehetett a Mozilla megvalósítása szorosan illeszkedett a Microsoft-éhoz. A Mozilla elkészített egy wrapper-t, ami lehetőséget adott arra, hogy ezt az interfészt Javascipt-en keresztül is használni lehessen. Létrehoztak egy JavaScipt objektumot, XMLHttpRequest-et. Az "XMLHttpRequest" objektum egy korai 0.6-os Gecko kiadásban már elérhető volt 2000. december 6-án, de ez sem volt teljesen működőképes egészen a 2002. június 5-én kiadott 1.0-s Gecko kiadásig. A XMLHttpRequest objektum de-facto szabvánnyá vált a többi fontosabb böngészőben, mint például a Safari 2004 februári 1.2-es kiadásában, Konqueror, Opera 2005 áprilisi 8.0-s kiadásában, és az iCab 2005 szeptemberi 3.0b352 kiadásában.
2006. április 5-én Anne van Kesteren Opera Software-től és Dean Jackson W3C-től elkészítettek egy előzetes munka tervezetet a "XMLHttpRequest" objektumról, amit abban az éven World Wide Web konzorcium által publikálva lett. Célja a program specifikus kódokat elfedő réteg mögé gyűjtése, annak érdekében, hogy a fejlesztőknek ne kelljen platform specifikus kódokat írni. 2009. november 19-én adták ki az utolsó munka tervezetet "XMLHttpRequest"-ről.
A 2006 októberében kiadott Internet Explorer 7.0 volt az a kiadás, ahol a Microsoft a "XMLHttpRequest" objektum azonosítót hozzáadta a szkript nyelvéhez.
A böngésző független Javascipt könyvtárak megjelenésétől kezdve, ilyen például: jQuery, vagy a Prototype JavaScript Framework, a fejlesztők képesek használ a XMLHttpRequest funkcionalitását, anélkül, hogy közvetlenül az API szintjén kellene programozniuk. A prototípus támogatja az aszinkron kéréseket, aminek neve Ajax.Request. A jQuery egyfajta wrapper, ami biztosítja a hozzáférést a böngésző mélyebb szintű funkcióinak eléréséhez. A jQuery objektumok reprezentálnak vagy egyfajta wrapper objektumot képeznek a már létező HTML elemkhez a kliens oldali DOM-ban. Minden objektum rendelkezik egy .load()paraméterrel, ami lehetővé teszi URI paraméterek fogadását, majd egy ilyen objektum fogadásánal elkészít hozzá egy XMLHttpRequest-et, az ebből visszakapott HTML-hez, elkészít jQuery objektumot.
A W3C a XMLHttpRequest objektum első munka tervezetének publikálása óta, nyilvánosságra hozta már a "2. szintű XMLHttpRequest" -t is 2008. február 25-én. A 2. szint bővebb kiterjesztése a XMLHttpRequest''-nek, de jelenleg nem kizárólagosan, vagyis nem minden böngészőben érhető el. Ilyen bővítések például a folyamat események, támogatja az oldalak közötti lekérdezést, illetve a képes kezelni a bájt folyamot. 2011. augusztus 16-án adták ki a legfrissebb specifikációt a 2. szintű XMLHttpRequest-ről, ami még mindig tervezet státuszban van. 2011. december 5-e óta a 2. szintű tervezet hozzá lett adva a XMLHttpRequest fő specifikációjához és így nincs többé 1. és 2. verzió.
Internet Explorer 5, 5.5 és 6 verziók támogatása Az Internet Explorer 5. és 6. verziójának szkript nyelvében nincs definiálva a XMLHttpRequest objektum azonosító, mert akkor még nem volt szabvány, mikor azokat kiadták. Visszafelé kompatibilitással elérték hogy akkor is detektálható legyen, ha a XMLHttpRequest azonosító nem létezik. Azok az oldalak, amik használnak XMLHttpRequest-et vagy XMLHTTP-t, kisebb implementásáli különbségekkel enyhítése miatt a XMLHttpRequest egy JavaScript wapper mögött található, vagy egy már létező keretrendszer mögött, ami hasonlóképp működik. Minden esetben a wrapper képes észlelni az aktuális implementáció képességeit és képes működni a követelményeknek megfelelően. Mióta a Microsoft nem támogatja a Windows XP-t az Internet Explorer 6-tal, azóta a JavaScript-be beágyazott XMLHttpRequest támogatva van. Erre példa a következő: /* Provide the XMLHttpRequest constructor for Internet Explorer 5.x-6.x: Other browsers (including Internet Explorer 7.x-9.x) do not redefine XMLHttpRequest if it already exists.
This example is based on findings at: http://blogs.msdn.com/xmlteam/archive/2006/10/23/using-the-right-version-of-msxml-in-internet-explorer.aspx */ if (typeof XMLHttpRequest == "undefined") XMLHttpRequest = function () { try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e) {} try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e) {} try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} //Microsoft.XMLHTTP points to Msxml2.XMLHTTP and is redundant throw new Error("This browser does not support XMLHttpRequest.");
További cikkek
WebSockets Hypertext Transfer Protocol Representational State Transfer Ajax
Jegyzetek
Külső hivatkozások
Specifikációk XMLHttpRequest (level 1) specification from W3C (abandoned Candidate Recommendation) XMLHttpRequest level 2 specification from W3C (Working Draft) Cross-Origin Resource Sharing Progress Events 1.0
Böngészők MSDN Library Specification of the XMLHttpRequest object for Microsoft developers XDomainRequest Specification of the XMLHttpRequest object for Mozilla developers Specification of the XMLHttpRequest object for Opera developers
Kategória:HTTP Kategória:Web 2.0 Kategória:Webfejlesztés