HTML даже был определен в терминах XML. Этот подход называется XHTML (eXtended HyperText Markup Language — расширенный язык гипертекстовой разметки). В общем-то это просто версия HTML с очень жесткими требованиями. Страницы XHTML должны строго соответствовать правилам XML, иначе они не принимаются браузером. Так что с низкокачественными веб-страницами и несовместимости страниц с браузерами покончено. Так же как в случае с XML, целью было создание страниц, которые бы легче обрабатывались программами (в данном случае веб-приложениями). Хотя XHTML существовал с 1998 года, он долго не мог завоевать популярность. Те, кто пользовался HTML, не понимали, зачем им нужен XHTML, и он долго не поддерживался браузерами. Сегодня HTML 5.0 определен таким образом, что страница может быть написана либо на HTML, либо на XHTML, чтобы переход на новый стандарт не был таким резким. В итоге XHTML должен заменить HTML, но пройдет еще много времени, прежде чем этот переход будет завершен.
XML также обрел популярность, как язык коммуникации между программами. Когда это взаимодействие проводится при помощи протокола HTTP (описанного в следующем разделе), оно называется веб-сервисом (Web service). Стоит обратить внимание на SOAP (Simple Object Access Protocol — простой протокол доступа к объектам), который является способом реализации веб-сервисов, выполняющих вызов удаленных процедур между программами, независимо от их языка и платформы. Клиент просто создает запрос в форме XML-сообщения и отсылает его на сервер, используя протокол http. Сервер отсылает ответ в такой же форме. Таким образом приложения на различных платформах могут работать вместе.
Возвращаясь к AJAX, мы лишь подчеркиваем, что XML является полезным форматом для обмена данными между программами, работающими в браузере и на сервере. Однако, чтобы создать быстро откликающийся интерфейс в браузере при отсылке или получении данных, у скриптов должна быть возможность осуществлять асинхронные операции ввода/вывода, которые не блокируют дисплей при ожидании ответа на запрос. Например, рассмотрим вариант с картой, которую можно прокручивать в браузере. Когда скрипт получает сообщение о том, что пользователь начал прокручивать карту, он может запросить больше данных о карте с сервера, если просматриваемый кусок близок к границе уже полученной части карты. Интерфейс не должен застывать, пока получаются эти данные, иначе ему не светит получить место под солнцем. Вместо этого прокрутка должна продолжаться без помех. Когда данные будут получены, скрипт получает об этом сообщение и может их использовать. Если все идет по плану, новые данные о карте оказываются получены до того, как в них возникает необходимость. В современных браузерах имеется поддержка такой модели коммуникации.
Последняя часть головоломки — это скриптовый язык, который собирает AJAX в единое целое, предоставляя доступ к описанным выше технологиям. В большинстве случаев этот язык — JavaScript, но существуют и такие альтернативы, как VBScript. Мы приводили простой пример JavaScript ранее. Но пусть вас не обманывает эта кажущаяся простота. У JavaScript есть множество индивидуальных особенностей, но это полноценный язык программирования со всеми возможностями C и Java. В нем есть переменные, строки, массивы, объекты, функции и все обычные управляющие структуры. У него также есть интерфейсы, связанные с особенностями браузера и веб-страницы. JavaScript может отслеживать передвижение мышки по объектам на экране, что позволяет легко создать внезапно выпадающее меню и делает страницы более живыми. Он может использовать DOM, чтобы получить доступ к страницам, манипулировать HTML и XML и проводить асинхронные HTTP-коммуникации.
Перед тем как оставить вопрос динамических страниц, позвольте нам вкратце обобщить технологии, о которых мы успели поговорить, проиллюстрировав их отдельным примером. Целые веб-страницы могут быть созданы при помощи различных скриптов, размещенных на сервере. Скрипты могут быть написаны на языках серверных расширений, таких как PHP, JSP или ASP.NET, или запускать отдельные процессы CGI и таким образом быть написаны на любом языке. Эти возможности показаны на рис. 7.15.
Рис. 7.15. Различные технологии, используемые для создания динамических страниц.
Когда браузер получает веб-страницы, они обрабатываются как нормальные страницы на HTML, CSS и других типах MIME и просто отображаются. Плагины, которые запускаются в браузере, и вспомогательные приложения, запускаемые вне браузера, могут быть инсталлированы, чтобы расширить типы MIME, которые поддерживаются браузером.
Создание динамического контента также возможно на стороне клиента. Программы, которые размещены на веб-страницх, могут быть написаны на JavaScript, VBScript, Java и других языках. Эти программы могут проводить произвольные вычисления и обновлять дисплей. При помощи AJAX программы на веб-страницах могут асинхронно обмениваться XML-файлами и другими видами данных с сервером. Эта модель поддерживает различные веб-приложения, которые выглядят так же, как и традиционные приложения. Отличие лишь в том, что они работают в браузере и получают информацию, хранящуюся на серверах в Интернете.
7.3.4. HTTP — протокол передачи гипертекста
Теперь, когда мы примерно понимаем, что такое веб-контент и веб-приложения, пора посмотреть на протокол, который используется для передачи всей этой информации от веб-сервера к клиенту и обратно. Это HTTP (HyperText Transfer Protocol — протокол передачи гипертекста), определенный в RFC 2616.
HTTP — простой протокол, работающий по принципу запрос-ответ, который обычно запускается через TCP. Он определяет, какие сообщения клиент может отсылать на серверы и какие получать ответы. Заголовки запросов и ответов, так же как в SMTP, даны в ASCII. Их содержимое задано в формате, похожем на MIME, так же как и в SMTP. Эта простая модель частично была причиной успеха Всемирной паутины на раннем этапе, так как повлекла ее быстрое развитие и распространение.
В этом разделе мы поговорим о наиболее важных свойствах HTTP в том виде, в котором он используется сегодня. Однако, прежде чем переходить к подробному рассказу, мы отметим, что способ его использования в Интернете эволюционирует. HTTP — это протокол прикладного уровня, так как он работает поверх TCP и близко ассоциируется с веб. Именно поэтому мы решили поговорить о нем в этой главе. Однако в другом смысле HTTP становится больше похож на транспортный протокол, который предоставляет способ передачи контента из одной сети в другую. Эти процессы не всегда идут в рамках общения веб-браузера с веб-сервером. Медиаплеер может использовать HTTP, чтобы обратиться к серверу и получить информацию об альбоме. Антивирус может использовать HTTP для того, чтобы загрузить последние обновления. Разработчики — для получения файлов по какому-либо проекту. Бытовая электроника, такая как рамки для цифровых фотографий, часто используют HTTP-сервер как интерфейс, связывающий их с внешним миром. Коммуникации между компьютерами все чаще идут при помощи HTTP. Например, сервер авиакомпании может использовать SOAP (XML RPC через HTTP) для связи с сервером аренды машин и таким образом резервировать автомобили в качестве услуги, предоставляемой в пакете при покупке тура. Вероятно, развитие в этом направлении продолжится наряду с расширением использования HTTP.
Соединения
Обычный способ взаимодействия браузера с сервером заключается в установке TCP-соединения с портом 80 сервера, хотя формально эта процедура не является обязательной. Ценность использования TCP в том, что ни браузерам, ни серверам не приходится беспокоиться о том, что делать со слишком длинными сообщениями, надежностью и контролем перегрузки. Все это обеспечивается протоколом TCP.
Ранее, в HTTP 1.0 после установки соединения посылался один запрос, на который приходил один ответ. После этого TCP-соединение разрывалось. В то время типичная веб-страница целиком состояла из HTML-текста, и такой способ взаимодействия был адекватным. Однако вскоре средняя веб-страница стала изобиловать большим количеством ссылок на различные значки и другие украшения. Очевидно, что установка TCP-соединения для передачи одного значка оказалась нерациональной и слишком дорогой.