XMLHttpRequest: API для обмена данными между браузером и сервером
XMLHttpRequest
XMLHttpRequest: API для обмена данными между браузером и сервером. Основа Ajax, позволяет асинхронно отправлять HTTP-запросы и обновлять данные без перезагрузки страницы.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Web API для передачи данных между веб-браузером и веб-сервером.
Web API to transfer data between a web browser and a web server
XMLHttpRequest (XHR) — это API в виде объекта JavaScript, методы которого отправляют HTTP-запросы из веб-браузера на веб-сервер. Эти методы позволяют веб-приложению выполнять точечные запросы к серверу и сохранять результаты в атрибуте responseText объекта XMLHttpRequest. 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).
XMLHttpRequest (XHR) is an API in the form of a JavaScript object whose methods transmit HTTP requests from a web browser to a web server. The methods allow a browser based application to make a fine grained server call and store the results in XMLHttpRequest's responseText attribute. XMLHttpRequest is a component of Ajax programming. Prior to Ajax, hyperlinks and form submissions were the primary mechanisms for interacting with the server, often replacing the current page with another one. The concept was then implemented within the Internet Explorer 5 browser (2001). However, the original syntax did not use the XMLHttpRequest identifier. Instead, the developers used the identifiers ActiveXObject("Msxml2. XMLHTTP") and ActiveXObject("Microsoft. XMLHTTP"). As of Internet Explorer 7 (2006), all browsers support the XMLHttpRequest identifier. Safari 1.2 (2004) and Opera 8.0 (2005).
Стандарты
Консорциум Всемирной паутины (W3C) опубликовал рабочий проект спецификации для объекта XMLHttpRequest 5 апреля 2006 года. 25 февраля 2008 года W3C опубликовал рабочий проект спецификации уровня 2. Уровень 2 добавил методы для отслеживания прогресса событий, разрешения межсайтовых запросов и обработки байтовых потоков. В конце 2011 года спецификация уровня 2 была включена в исходную спецификацию. В конце 2012 года WHATWG взял на себя дальнейшую разработку и поддерживает актуальный документ, используя Web IDL.
The World Wide Web Consortium (W3C) published a Working Draft specification for the XMLHttpRequest object on April 5, 2006. On February 25, 2008, the W3C published the Working Draft Level 2 specification. Level 2 added methods to monitor event progress, allow cross site requests, and handle byte streams. At the end of 2011, the Level 2 specification was absorbed into the original specification. At the end of 2012, the WHATWG took over development and maintains a living document using Web IDL.
Запросы с разными доменами
В начале развития Всемирной паутины было обнаружено, что можно скомпрометировать безопасность пользователей, используя JavaScript для обмена информацией между веб-сайтами, в том числе с менее надежными ресурсами. Поэтому все современные браузеры реализуют политику одного источника (same origin policy), которая предотвращает многие подобные атаки, такие как межсайтовый скриптинг (cross-site scripting). Данные XMLHttpRequest подчиняются этой политике безопасности, но иногда веб-разработчикам необходимо намеренно обойти её ограничения. Это может быть обусловлено, например, законным использованием субдоменов: запрос XMLHttpRequest со страницы, созданной на foo.example.com, к ресурсу bar.example.com обычно будет отклонен. Существуют различные способы обхода этой функции безопасности, включая использование JSONP, механизма Cross-Origin Resource Sharing (CORS) или устаревших плагинов, таких как Flash или Silverlight. Cross-origin XMLHttpRequest специфицирован в спецификации XMLHttpRequest Level 2 от W3C. Internet Explorer не поддерживал CORS до версии 10. Две предыдущие версии (8 и 9) предлагали схожую функциональность через API XDomainRequest (XDR). CORS теперь поддерживается всеми современными браузерами (настольными и мобильными). Протокол CORS имеет ряд ограничений и две модели поддержки. В простой модели запрещено устанавливать пользовательские заголовки запросов и передавать cookies. Кроме того, поддерживаются только методы запросов HEAD, GET и POST, при этом POST допускает только следующие типы MIME: "text/plain", "application/x-www-form-urlencoded" и "multipart/form-data". Изначально поддерживался только "text/plain". Другая модель определяет, когда запрашивается одна из расширенных функций, и отправляет предварительный запрос (preflight request) на сервер для согласования её использования.
In the early development of the World Wide Web, it was found possible to breach users' security by the use of JavaScript to exchange information from one web site with that from another less reputable one. All modern browsers therefore implement a same origin policy that prevents many such attacks, such as cross site scripting. XMLHttpRequest data is subject to this security policy, but sometimes web developers want to intentionally circumvent its restrictions. This is sometimes due to the legitimate use of subdomains as, for example, making an XMLHttpRequest from a page created by foo. example. com for information from bar. example. com will normally fail. Various alternatives exist to circumvent this security feature, including using JSONP, Cross Origin Resource Sharing (CORS) or alternatives with plugins such as Flash or Silverlight (both now deprecated). Cross origin XMLHttpRequest is specified in W3C's XMLHttpRequest Level 2 specification. Internet Explorer did not implement CORS until version 10. The two previous versions (8 and 9) offered similar functionality through the XDomainRequest (XDR) API. CORS is now supported by all modern browsers (desktop and mobile). The CORS protocol has several restrictions, with two models of support. The simple model does not allow setting custom request headers and omits cookies. Further, only the HEAD, GET and POST request methods are supported, and POST only allows the following MIME types: "text/plain", "application/x www urlencoded" and "multipart/form data". Only "text/plain" was initially supported. The other model detects when one of the non simple features are requested and sends a pre flight request to the server to negotiate the feature.
Достать альтернативный
Поток программы, использующий асинхронные обратные вызовы XHR, может быть сложным для чтения и поддержки. ECMAScript 2015 (ES6) представил конструкцию Promise для упрощения асинхронной логики. С тех пор браузеры реализовали альтернативный интерфейс Fetch для достижения той же функциональности, что и XHR, но с использованием Promise вместо обратных вызовов. Fetch также стандартизирован WHATWG.
Program flow using asynchronous XHR callbacks can present difficulty with readability and maintenance. ECMAScript 2015 (ES6) added the promise construct to simplify asynchronous logic. Browsers have since implemented the alternative fetch interface to achieve the same functionality as XHR using promises instead of callbacks. Fetch is also standardized by WHATWG.