Кіріспе

Веб-браузер мен веб-сервер арасында деректерді алмасуға арналған веб-API.

XMLHttpRequest (XHR) – JavaScript объектісі түріндегі API, оның әдістері веб-браузерден веб-серверге HTTP сұрауларын жібереді. Бұл әдістер браузерлік қолданбаға серверге нақты сұраулар жіберуге және нәтижелерді XMLHttpRequest-тің responseText атрибутында сақтауға мүмкіндік береді. XMLHttpRequest – Ajax бағдарламалаудың құрамдас бөлігі. Ajax пайда болғанға дейін гиперсілтемелер мен формаларды жіберу сервермен өзара әрекеттесудің басты механизмдері болды, көбінесе ағымдағы бетті толығымен басқа бетпен алмастыратын. Бұл идея алғаш рет Internet Explorer 5 браузерінде (2001) іске асырылды. Дегенмен, бастапқы синтаксис XMLHttpRequest идентификаторын пайдаланбады. Оның орнына, әзірлеушілер ActiveXObject("Msxml2.XMLHTTP") және ActiveXObject("Microsoft.XMLHTTP") идентификаторларын қолданды. Internet Explorer 7 (2006) нұсқасынан бастап барлық браузерлер XMLHttpRequest идентификаторын қолдайды, сондай-ақ Safari 1.2 (2004) және Opera 8.0 (2005) браузерлері де қолдайды.

Стандарттар

World Wide Web Consortium (W3C) 2006 жылдың 5 сәуірінде XMLHttpRequest нысанына арналған жұмыс жобасы спецификациясын жариялады. 2008 жылдың 25 ақпанында W3C 2-деңгейлі жұмыс жобасы спецификациясын жариялады. 2-деңгей оқиғалардың прогресін қадағалау, сайттар арасындағы сұрауларды жүзеге асыру және байт ағындарын басқару әдістерін қосты. 2011 жылдың соңында 2-деңгейлі спецификация бастапқы спецификацияға біріктірілді. 2012 жылдың соңында WHATWG әзірлеуді өз үстіне алды және Web IDL қолданып, жаңарып отыратын құжатты қолдайды.

Домен аралық сұраулар

World Wide Web-тің бастапқы даму кезеңдерінде JavaScript-ті пайдаланып бір веб-сайттан екінші, сенімсіз сайтқа ақпарат алмасу арқылы пайдаланушылардың қауіпсіздігін бұзу мүмкін болды. Сондықтан, барлық заманауи браузерлер мұндай шабуылдарды, мысалы, сайттар аралық скрипттерді (cross-site scripting) болдырмайтын бірдей түпкілікті саясатты (same origin policy) іске асырады. XMLHttpRequest деректері осы қауіпсіздік саясатына бағынады, бірақ кейде веб-дамытушылар оның шектеулерін қасақана айналып өтуге тырысады. Мұның себебі кейде субдомендерді заңды түрде пайдалану болуы мүмкін, мысалы, foo.example.com доменінде жасалған беттен bar.example.com доменінен ақпарат алуға жасалған XMLHttpRequest сұранымы әдетте сәтсіз аяқталады. Бұл қауіпсіздік мүмкіндігін айналып өту үшін JSONP, Cross Origin Resource Sharing (CORS) сияқты әртүрлі баламалар бар, сондай-ақ Flash немесе Silverlight (қазір қолданыстан шығарылған) сияқты плагиндерді пайдалануға болады. Кросс-оригиналды XMLHttpRequest W3C-нің XMLHttpRequest Level 2 спецификациясында сипатталған. Internet Explorer браузері CORS-ты 10-шы нұсқасына дейін іске асырмады. Алдыңғы екі нұсқасы (8 және 9) XDomainRequest (XDR) API арқылы ұқсас мүмкіндіктерді ұсынды. CORS қазір барлық заманауи браузерлерде (десктоптық және мобильдік) қолдауға ие. CORS протоколында бірнеше шектеулер бар және екі түрлі қолдау моделі бар. Жақсырақ модельде реттелген сұрау жүйесінің қаптамаларын орнатуға рұқсат берілмейді және cookie файлдары жіберілмейді. Бұдан өзге, тек HEAD, GET және POST сұрау түрлері қолдауға ие, ал POST тек келесі MIME түрлерін ғана қабылдайды: "text/plain", "application/x-www-form-urlencoded" және "multipart/form-data". Бастапқыда тек "text/plain" түрі қолдауға ие болды. Екінші модельде қарапайым емес мүмкіндіктердің бірі сұралған кезде анықталып, серверге мүмкіндікті келісу үшін алдын ала сұраныс жіберіледі.

Баламаны алу

Асинхронды XHR кері шақыруларын пайдалану бағдарлама ағынының түсініктілігі мен күтімін қиындатуы мүмкін. ECMAScript 2015 (ES6) асинхронды логиканы жеңілдету үшін уәде конструкциясын қосты. Браузерлер одан бері кері шақырулардың орнына уәделерді қолдана отырып, XHR сияқты функционалдыққа қол жеткізу үшін баламалы fetch интерфейсін іске асырды. Fetch сондай-ақ WHATWG стандартында де бекітілген.