XМЛХттпРеqуест
XМЛХттпРеqуест (XХР) је АПИ доступан за скриптне језике као што је ЈаваСцрипт. Користи се за слање ХТТП или ХТТПС захтева директно ка веб серверу и упућује одговоре сервера назад ка скрипти.[1] Подаци могу бити примљени са сервера као ЈСОН,[2] XМЛ,[3] ХТМЛ, или текст.[4] Подаци добијени у одговору могу се директно пренети у ДОМ тренутно активног документа без потребе за учитавањем нове интернет странице. Подаци добијени у одговору такодје могу бити интерпретирани од стране клијентски оријентисаних скриптних језика.
XМЛХттпРеqуест има битну улогу у развоју интернет софтвера коришћењем Ајаx технологија. Тренутно га користе многе интернет странице за имплементацију динамичких интернет апликација. Неки од примера ових апликација су џимејл, гугл мапе, фејсбук, и многи други.
XМЛХттпРеqуест мора поштовати политику, правила браузвера, због сигурносних разлога, захтев ће бити успешан ако је потекао са истог сервера који сервира оригиналну веб страницу. Постоје алтернативни начини да се ово превазиђе(избегне).
Историја и подршка
уредиКонцепт XМЛХттпРеqуест објекта је оригинално креиран од програмера из Оутлоок Wеб Аццесс (из Мицрософт) за Мицрософт Еxцханге Сервер 2000.[5] Интерфејс зван ИXМЛХТТПРеqуест је развијен и имплементиран у другој верзији МСXМЛ библиотеке користеци овај концепт.[5][6] Друга верзија МСXМЛ библиотеке је испоручена са Интернет Еxплорер 5.0 у Марту 1999 године, АцтивеX је омогућавао приступ ИXМЛХТТПРеqуест интерфејсу користећи XМЛХТТП омотач-wраппер МСXМЛ библиотеке.[7]
Мозила пројекат развио је и имплементирао интерфејс под називом нслXМЛХттпРеqуест у Гецко моторном распореду. Овај интерфејс рађен је по узору на Мицрософт-ов ИXМЛХТТПРеqуест колико год је то било могуће..[8][9] Мозила је креирала омотач за коришћење овог интерфејса преко ЈаваСцрипт објекта који се назива XМЛХттпРеqуест.[10] XМЛХттпРеqуест објекат био је доступан када је Гецко верзија 0.6 објављена 6.децембра 2000. Године[11][12] , али није био потпуно функционалан. Тек верзија 1.0 Гекоо објављена 5.јуна 2002.[11][12] XМЛХттпРеqуест објекат постао је де факто стандард код других великих веб клијената реализован у Сафари 1.2, објављен у фебруару 2004.године[13] Конqуерор, Опера 8.0 објављена у априлу 2005[14] и иЦаб 3.0б352 објављена у септембру 2005.године.[15]
[W3Ц|Wорлд Wиде Wеб Цонсортиум објавио је нацрт спецификације за XМЛХттпРеqуест објекат 5. Априла 2006. Измењен од стране Анне ван Кестеран за Опера Софтwаре и Деан Јацксон оф W3Ц.[16] Њен циљ био је "да се документује скуп минималних итероперабилних функција заснован на постојећим имплементацијама, што омогућава Веб програмерима да користе ове функције без платформе-специфичног кода." Последња ревизија спецификације XМЛХттпРеqуест објекта била је 19. Новембра 2009, као последњи радни нацрт.[17] [18] Мицрософт је додао XМЛХттпРеqуест објекат идентификатор својим скриптама у Интернет Еxплорер 7.0 објављном у октобру 2006.[7]
Са појавом цросс-броwсера ЈаваСцрипт библиотека као што је јQуерy и Прототyпе ЈаваСцрипт Фрамеwорк, програмери могу да позову XМЛХттпРеqуест без кодирања директно на АПИ. Прототип је омогућио асинхрони објекат тражилац који се назива Ajax
. Захтев који покрива основну имплементацију прегледача обезбеђујући приступ до њега.[19] јQуерy објекти представљају или wрапују елементе из тренутне клијентске стране ДОМ. Сви они имају .load()
Метод који узима УРИ параметар и прави XМЛХттпРеqуест ка УРИ-ју, онда поставимо на било која места враћени ХТМЛ у ХТМЛ елемент који представља јQуерy објекат.[20]
W3Ц је објавио још један од нацрта спецификације за XМЛХттпРеqуест објекат. „XМЛХттпРеqуест Левел 2“ 25. 2. 2008.године.[21] Ниво 2 се састоји од проширене функционалности за XМЛХттпРеqуест објекат, укључујући, али не ограничавајући, напредак, подршка за цросс-сите реqуест и решавање бајт система. Најновија ревизија XМЛХттпРеqуест Левел2 спецификације је од 16.августа 2011, која је и даље у употреби.[22]
XМЛХттпРеqуест[23] верзије 2 спојен је у главну XМЛХттпРеqуест спецификацију и не постоји више верзија 1 и верзија 2.
Подршка у верзијама 5, 5.5 и 6 Интернет Еxплорер-а
уредиУ верзијама 5 и 6 Интернет Еxплорер-а није дефинисан индетификатор за XМЛХттпРеqуест објекат у оквиру њиховог скрипт језика с обзиром да XМЛХттпРеqуест индетификатор није био стандард у време њиховог представљања.[7] Компатибилност уназад може бити постигнута коришћењем детекције објеката уколико XмлХттпРеqуест индетификатор не постоји.[24]
Веб странице које користе XМЛХттпРеqуест могу ублажити тренутне мање разлике у импементацији било обмотавањем XМЛХттпРеqуест објекта ЈаваСцрипт омотачем, било коришћењем постојећег оквира(фрамеwорк) који то ради. У било којем случају, омотач би требао да детектује тхе абилитиес тренутне имплементације и ради у оквиру њених захтева.
Мицрософт ће поџавати Wиндоwс XП а самим тим и Интернет Еxплорер 6 до 8 Април 2014. Пример обмотавања у ЈаваСцрипт-у приказан је испод.
/*
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.");
};
}
Други начин за постављање XМЛХттпРеqуест за све прегледаче
уредиfunction getXMLHttpRequestObject() {
var ref = null;
if (window.XMLHttpRequest) {
ref = new XMLHttpRequest();
} else if (window.ActiveXObject) { // Older IE.
ref = new ActiveXObject("MSXML2.XMLHTTP.3.0");
}
return ref;
}
ХТТП захтев
уредиОва секција демонстрира како функционише захтев коришћењем XМЛХттпРеqуест објект у оквиру корисничких агената базираних на W3Ц нацрту.
Метод опен
уредиХТТП и ХТТПС захтев XМЛХттпРеqуест објекта мора бити иницијализован кроз опен метход. Овај метод мора бити позван пре слања самог захтева како би потврдио и решио захтев. Овај метод не гарантује постојање УРЛ адресе или тачност послатих података. Овај метод мозе имати највисе пет параметера, али сам захтев мозе имати највисе два за иницијализацију самог захтева.
open(Method, URL, Asynchronous, UserName, Password )
Први параметар метода је теxт стринг који означава који ХТТП захтев се користи. Захтеви који морају бити подржани од стране усаглашених усер агент, дефинисани од стране W3Ц нацрта за XМЛХттпРеqуест објекте, су:[25]
- ГЕТ (Подржан од стране Интернет Еxплорер 7 (и новије верзије), Мозилла 1+)
- ПОСТ (Подржан од стране Интернет Еxплорер 7 (и новије верзије), Мозилла 1 (и новије верзије))
ХЕАД (Подржан од стране Интернет Еxплорер 7 (и новије верзије))
Ипак, захтеви нису ограничени само на горе наведене. По W3Ц нацрту интернет прегледачи могу да подржавају додатне захтеве.
Други параметар метода је такодје теxт стринг, овај параметар означава УРЛ ХТТП захтева. Препорука W3Ц-а је да интернет прегледачи треба да пријаве грешку и не дозволе захтев у случају да УРЛ има другачији порт од или ихост УРИ компоненту него тренутни документ. Трећи параметар је боолеан вредност која означава да ли ће захтев бити асинхрон, и није обавезан по W3Ц нацрту. Мозе се претпоставити да је подразумевана вредност овог параметра тачно(труе), за корисничке агенте усаглашене са W3Ц нацртом, ако он није наведен. Асинхрони захтев(вредност труе) неће чекати одговор сервера, већ ће скрипта наставити са извршавањем. Синхрони захтев(вредност фалсе) ће блокирати извршавање тренутне скрипте све док захтев не буде завршен.
Четврти и пети параметак су корисночко име и шифра. Ови параметри могу бити послати за аутентикацију и ауторизацију.
сетРеqуестХеадер метод
уредиНакон успешне иницијализације захтева, мозе бити позван сетРеqуестХеадер метод XМЛХттпРеqуест објекта за слање ХТТП хедера заједно са захтевом.
setRequestHeader(Name, Value )
Први параметар је типа стринг и представља име хедера. Други параметар је такодје типа стринг и представља вредност. Овај метод мора бити позван за сваки хедер који се мора послати са захтевом.
сенд метод
уредиЗа слање ХТТП захтева мора бити позван сенд метод XмлХттпРеqуест објекта. Овај метод има само један параметар, садржину која се шаље са захтевом.
send (Data )
Овај параметар може бити изостављен ако се никаква садржина не треба послати. По W3Ц нацрту овај параметар може бити било ког типа који се може конвертовати у стринг, а да је подржан од стране скрипт језика. Ако кориснички агент не може да обради овај параметар онда он треба бити игнорисан.
Уколико је параметар ДОМ објекат кориснички агент треба да осигура да је објекат конвертован у добро формиран XМЛ.
онреадyстатецханге ослушкивач догађаја
уредиАко је опен метод XМЛХттпРеqуест објекта позван са трецим параметром труе за асихрони захтев, онреадyстатецханге ослушкивач догађаја ће аутоматски бити позван за све акције које мењају реадyСтате својство XМЛХттпРеqуест објекта.
Промене стања функционишу на следећи начин:
- Након што је успешно позван опен метод, реадyСтате својство XМЛХттпРеqуест објекта требало би да добије вредност 1.
- Након сто је позван сенд метод и добијен одговор у виду ХТТП заглавља, реадyСтате својство XМЛХттпРеqуест објекта требало би да добије вредност 2.
- Када садржина ХТТП одговора почне да се учитава, реадyСтате својство XМЛХттпРеqуест објекта требало би да добије вредност 3.
- Након што је садржина ХТТП одговора учитана, реадyСтате својство XМЛХттпРеqуест објекта требало би да добије вредност 4.
Ослушкивач реагује само на промене стања које су се десиле након што је ослушкивач дефинисан. Како би детектовао стања 1 и 2, ослушкивач мора бити дефинисан пре него сто је позван метод опен. Метод опен мора бити позван пре метода сенд.
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState === 4){
alert(xmlhttp.readyState);
}
};
xmlhttp.open('GET', 'somepage.xml', true);
xmlhttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); // Tells server that this call is made for ajax purposes.
// Most libraries like jQuery/Prototype/Dojo do this
xmlhttp.send(null); // No data need to send along with the request.
аборт метод
уредиОвај метод прекида захтев ако реадyСтате XМЛХттпРеqуест објекта није јос постао 4.[26]аборт метод обезбеђује да се прекине очекивање одговора у асинхроном захтеву.
abort()
Неке АЈАX библиотеке користе аборт метод за прекидање потецијалних дупликата или лоших захтева.[27]
ХТТП одговор
уредиНакон успешног и завршеног позива сенд метода, ако је сервер вратио валидан XМЛ и ако је Цонтент-Тyпе хеадер враћен од стране сервера препознат као Интернет медиа тyпе за XМЛ од стране корисничког агента, респонсеXМЛ својство XМЛХттпРеqуест објекта ће саџати ДОМ објекат. Друго својство, респонсеТеxт ће садржати одговор сервера као текст.
Цросс-домаин захтев
уредиУ почетку развоја Wорлд Wиде Wеб, откивена је да је могуће нарушити приватност корисника уколико се користи ЈаваСцрипт за размену информација измедју две Веб странице. Због тога сви модерни Веб прегледачи имплементирају саме оригин полицy како би спречили већину таквих напада, као што је цросс-сите сцриптинг. XМЛХттпРеqуест подаци су део ове сигурносне политике, али понекад програмери желе да намерно заобидју ограничења. То се понекад ради због омогућавања поддомена. На пример, слање XмлХттпРеqуест захтева са странице која се налази на foo.example.com
како би се добиле информација са bar.example.com
не би успело ако се не би заобишла нека ограничења.
Постоји неколико алтернатива за заобилажење ових сигурносних својстава, укључијући коришћење ЈСОНП, Цросс-Оригин Ресоурце Схаринг или плагинова као сто су Фласх или Силверлигхт. XМЛХттпРеqуест Левел 2 такодје укључује својство за комуникацију са другим доменима.
Погледајте још:
уредиРеференце
уреди- ^ „XМЛХттпРеqуест објецт еxплаинед бy тхе W3Ц Wоркинг Драфт”. W3.орг. Приступљено 14. 7. 2009.
- ^ „Респонсе ентитy бодy оф XМЛХттпРеqуест, W3Ц Едитор'с Драфт”. W3.орг. 6. 2. 2012. Приступљено 5. 2. 2012.
- ^ „Тхе респонсеXМЛ аттрибуте оф тхе XМЛХттпРеqуест објецт еxплаинед бy тхе W3Ц Wоркинг Драфт”. W3.орг. Приступљено 14. 7. 2009.
- ^ „Тхе респонсеТеxт аттрибуте оф тхе XМЛХттпРеqуест објецт еxплаинед бy тхе W3Ц Wоркинг Драфт”. W3.орг. Приступљено 14. 7. 2009.
- ^ а б „Чланак из историје везан за поћетак XМЛХттпРеqуест”. Алеxхопманн.цом. 31. 1. 2007. Архивирано из оригинала 23. 06. 2007. г. Приступљено 14. 7. 2009.
- ^ „Спецификација за ИXМЛХТТПРеqуест интерфејс од Мицрософт Девелопер Нетwорк”. Мсдн.мицрософт.цом. Приступљено 14. 7. 2009.
- ^ а б в Дутта, Сунава (23. 1. 2006). „Нативе XМЛХТТПРеqуест објецт”. ИЕБлог. Мицрософт. Приступљено 30. 11. 2006.
- ^ „Специфицатион оф тхе нсИXМЛХттпРеqуест интерфаце фром тхе Мозилла Девелопер Центер”. Девелопер.мозилла.орг. 16. 5. 2008. Архивирано из оригинала 17. 10. 2008. г. Приступљено 14. 7. 2009.
- ^ „Специфицатион оф тхе нсИЈСXМЛХттпРеqуест интерфаце фром тхе Мозилла Девелопер Центер”. Девелопер.мозилла.орг. 3. 5. 2009. Архивирано из оригинала 17. 11. 2008. г. Приступљено 14. 7. 2009.
- ^ „Специфицатион оф тхе XМЛХттпРеqуест објецт фром тхе Мозилла Девелопер Центер”. Девелопер.мозилла.орг. 3. 5. 2009. Приступљено 14. 7. 2009.
- ^ а б „Версион хисторy фор тхе Мозилла Апплицатион Суите”. Мозилла.орг. Архивирано из оригинала 10. 04. 2009. г. Приступљено 14. 7. 2009.
- ^ а б „Доwнлоадабле, арцхивед релеасес фор тхе Мозилла броwсер”. Арцхиве.мозилла.орг. Приступљено 14. 7. 2009.
- ^ „Арцхивед неwс фром Мозиллазине статинг тхе релеасе дате оф Сафари 1.2”. Wеблогс.мозиллазине.орг. Архивирано из оригинала 02. 06. 2009. г. Приступљено 14. 7. 2009.
- ^ „Пресс релеасе статинг тхе релеасе дате оф Опера 8.0 фром тхе Опера wебсите”. Опера.цом. 19. 4. 2005. Архивирано из оригинала 20. 01. 2009. г. Приступљено 14. 7. 2009.
- ^ Софт-Инфо.орг. „Детаилед броwсер информатион статинг тхе релеасе дате оф иЦаб 3.0б352 фром”. Софт-Инфо.цом. Архивирано из оригинала 25. 07. 2011. г. Приступљено 14. 7. 2009.
- ^ „Специфицатион оф тхе XМЛХттпРеqуест објецт фром тхе Левел 1 W3Ц Wоркинг Драфт релеасед он Април 5тх, 2006”. W3.орг. Приступљено 14. 7. 2009.
- ^ „XМЛХттпРеqуест W3Ц Wоркинг Драфт 19 Новембер 2009”. W3.орг. Приступљено 17. 12. 2009.
- ^ „W3Ц Процесс Доцумент, Сецтион 7.4.2 Ласт Цалл Анноунцемент”. W3.орг. Приступљено 17. 12. 2009.
- ^ Портенеуве 2007, стр. 183.
- ^ Цхаффер & Сwедберг 2007, стр. 107–156 харвнб грешка: више циљева (2×): ЦИТЕРЕФЦхафферСwедберг2007 (хелп)
- ^ „Специфицатион оф тхе XМЛХттпРеqуест објецт фром тхе Левел 2 W3Ц Wоркинг Драфт релеасед он Фебруарy 25тх, 2008”. W3.орг. Приступљено 14. 7. 2009.
- ^ „XМЛХттпРеqуест Левел 2, W3Ц Wоркинг Драфт (Латест Версион)”. W3.орг. Приступљено 19. 11. 2010.
- ^ „XМЛХттпРеqуест Едитор'с Драфт 5 Децембер 2011”. w3.орг. Приступљено 5. 12. 2011.
- ^ „Ајаx Референце (XМЛХттпРеqуест објецт)”. ЈаваСцрипт Кит. 22. 7. 2008. Приступљено 14. 7. 2009.
- ^ „Депенденциес оф тхе XМЛХттпРеqуест објецт еxплаинед бy тхе W3Ц Wоркинг Драфт”. W3.орг. Приступљено 14. 7. 2009.
- ^ „XМЛХттпРеqуест - Доцумент Објецт Модел (ДОМ)”. Мозилла. Приступљено 5. 4. 2013.
- ^ „Ин-Ордер АЈАX Хандлинг”. Антрадар Софтwаре. 10. 3. 2012. Приступљено 20. 4. 2013.
Литература
уреди- Цхаффер, Јонатхан; Сwедберг, Карл (2007). јQуерy Референце Гуиде. Бирмингхам: Пацкт Публисхинг. стр. 156-. ИСБН 978-1-84719-381-0. Приступљено 24. 4. 2010.
- Портенеуве, Цхристопхе (2007). „9”. Ур.: Даниел Х Стеинберг. Прототyпе анд сцрипт.ацуло.ус: Yоу Невер Кнеw ЈаваСцрипт Цоулд До Тхис!. Ралеигх, Нортх Царолина: Прагматиц Бооксхелф. стр. 183. ИСБН 978-1-934356-01-2. Приступљено 24. 4. 2010.
- Цхаффер, Јонатхан; Сwедберг, Карл (2007). Леарнинг јQуерy. Бирмингхам: Пацкт Публисхинг. стр. 107-. ИСБН 978-1-84719-250-9. Приступљено 24. 4. 2010.
Спецификација
уреди- XМЛХттпРеqуест (левел 1) специфицатион фром W3Ц (абандонед Цандидате Рецоммендатион)
- XМЛХттпРеqуест левел 2 специфицатион фром W3Ц (Wоркинг Драфт)
Броwсерс - Прегледачи
уреди- МСДН Либрарy
- Специфицатион оф тхе XМЛХттпРеqуест објецт фор Мозилла девелоперс
- Специфицатион оф тхе XМЛХттпРеqуест објецт фор Опера девелоперс
Остало
уреди- Неw Трицкс ин XМЛХттпРеqуест2, онлине туториал бy Ериц Биделман (Девелопер Релатионс, Гоогле)
- "Аттацкинг АЈАX Апплицатионс" Архивирано на сајту Wayback Machine (8. фебруар 2012), a presentation given at the Black Hat security conference. Discusses several issues involving XHR and the future of cross-domain Ajax.
- [1] Support end of Windows XP