XMLHttpRequest
Материал из Википедии — свободной энциклопедии
XMLHTTP (XMLHttpRequest) — набор API, используемый в языках JavaScript, JScript, VBScript и им подобных для пересылки XML-данных по HTTP-протоколу между браузером и веб-сервером. Позволяет осуществлять HTTP-запросы к удаленному серверу без необходимости перезагружать страницу.
XMLHTTP является важной составляющей технологии Ajax (Asynchonized javascipt and XML), используется многими сайтами для создания динамичных, быстро реагирующих на запросы пользователя приложений. Например XMLHTTP используется такими сайтами как Gmail, Google Suggest, MSN Virtual Earth. К сожалению, XMLHTTP работает только с файлами, находящимися на том же домене, что и использующая XMLHTTP страница. Как и в случае JavaScript, это сделано в целях безопасности (cross-site scripting).
Кроме пересылки XML, по XMLHTTP можно обмениваться данными формы и просто текстовыми строками.
Содержание |
[править] История
Впервые был реализован компанией Microsoft, впервые появившись в Internet Explorer 5.0 в виде объекта ActiveX, доступного через JScript, VBScript, или другие скриптовые языки, поддерживающиеся браузером. Программисты проекта Mozilla затем разработали совместимую версию, называющуюся XMLHttpRequest в Mozilla 1.0. В дальнейшем эта возможность также была реализована компаниями Apple начиная с Safari 1.2, родственным браузером Konqueror, компанией Opera Software начиная с Opera 8.01, и, вероятно, другими.
[править] Известные проблемы
[править] Проблема с кешированием в Microsoft Internet Explorer
Internet Explorer кеширует GET-запросы. Те авторы, которые незнакомы с кешированием HTTP, ожидают, что GET-запросы не кешируются, или что кеш может быть обойдён, как в случае нажатия кнопки обновления. В некоторых ситуациях избегание кеширования действительно является ошибкой. Одним из решений является использование метода POST, который никогда не кешируется; однако он предназначен для других операций. Другим решением является использование метода запроса GET, включающего уникальную строку запроса с каждым вызовом, как показано на примере ниже.
req.open("GET", "xmlprovider.php?hash=" + Math.random());
или установки заголовка Expires на прошедшую дату в вашем скрипте, который генерирует содержимое XML. В PHP это будет так:
header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); // disable IE caching header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT" ); header( "Cache-Control: no-cache, must-revalidate" ); header( "Pragma: no-cache" );
В сервлетах Java это будет так:
response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "must-revalidate"); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Cache-Control", "no-store"); response.setDateHeader("Expires", 0);
Иначе можно заставить объект XMLHttpRequest всегда вытаскивать новое содержимое, не используя кеш.
req.open("GET", "xmlprovider.php"); req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); req.send(null);
Важно заметить, что все эти методики должны использоваться в случае, когда кеширование мешает. В основном же лучше получить преимущества в скорости при кешировании, возможно комбинируя со специально уточняемыми датами модификации или другими уместными заголовками на сервере так, чтобы использовать кеширование по максимуму без получения плохих результатов.
[править] См. также
[править] Ссылки
[править] Реализация в браузерах
- Apple Safari и KDE Konqueror
- Microsoft IXMLHTTPRequest
- Mozilla XMLHttpRequest object HowTo
- Mozilla XML Extras
- Opera для компьютеров и для мобильных телефонов