Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Internet_tehnologii_kurs_lek

.pdf
Скачиваний:
26
Добавлен:
24.03.2015
Размер:
6.93 Mб
Скачать

п+ 1, достигнувшего маршрутизатора п + 1. Обратите внимание на скачок значений задержки, наблюдающийся при переходе от маршрутизатора 10 к маршрутизатору 11. Это объясняется тем, что между ними находится трансатлантическая линия связи.

Если вы желаете самостоятельно поэкспериментировать с программой Traceroute, посетите сайт http://www.traceroute.org, на котором имеется широкий выбор адресов хостов-отправителей. Вам необходимо выбрать один хост из представленного списка, а затем указать любое имя хоста, который будет использоваться в качестве адресата. Все остальные действия программа выполнит автоматически.

23.Уровни протоколов и модели их обслуживания

Как вы, вероятно, убедились в процессе нашего обсуждения, Интернет является чрезвычайно сложной системой. Глобальная Сеть состоит из множества самых разных компонентов: приложений, протоколов, оконечных систем, технологий их доступа к сети, маршрутизаторов, линий связи и т. д. Неудивительно, если у вас уже успел возникнуть вопрос о том, поддается ли архитектура Интернета какой-либо организации. К счастью, мы можем вселить в вас долю оптимизма, ответив положительно.

Многоуровневая структура Перед тем как приступить к систематизации приобретенных знаний об Интернете, давайте поищем аналогию у людей. Каждый день

многие из нас сталкиваются со сложными системами. Представьте себе ситуацию, когда кто-нибудь просит вас описать организацию воздушных сообщений. Как вы станете описывать эту огромную структуру, включающую в себя отделы продажи билетов, проверки багажа, обслуживающий персонал, пилотов, летную технику, диспетчерские службы и т. д.? Один из способов описать организацию — это перечислить те действия, которые вы (или сотрудники организации) совершаете при ее использовании. К примеру, вы заказываете билет, проходите багажный контроль, регистрируетесь и попадаете на борт самолета. Затем вы совершаете перелет, достигаете пункта назначения, снова регистрируетесь, получаете багаж и, если рейс был некомфортным, подаете жалобу в отдел продажи билетов. Последовательность ваших действий графически иллюстрирует рис. 1.20.

Рис. 1.20. Последовательность действий пассажира при совершении перелета

Рис. 1.21. Горизонтальная многоуровневая структура процесса перелета

Здесь мы без труда можем увидеть аналогию с принципами функционирования компьютерных сетей. Вы путешествуете на самолете от пункта отправления до пункта назначения, а пакет передается от хоста-отправителя к хосту-адресату. Однако более глубокая аналогия заключена в структурах действий. Взглянем на рис. 1.20 чуть внимательнее. Как легко видеть, оба ваших конечных действия обращены к отделу продажи билетов, второе и предпоследнее действия связаны с багажом и т. д. Структура действий является симметричной, где «осью симметрии» служит перелет. Таким образом, процесс путешествия на самолете можно представить в виде совокупности горизонтальных уровней, как показано на рис. 1.21.

Приведенная горизонтальная структура является главным предметом нашего дальнейшего рассмотрения. Нам удалось определить место каждого компонента путешествия относительно других компонентов. Например, говоря о регистрации пассажиров, мы знаем, что эта процедура происходит после проверки багажа перед посадкой на борт самолета. Заметим, что каждый выделенный уровень обладает собственной функциональностью, то есть службами, предоставляющими услуги пассажирам. Ниже билетного уровня пассажир проходит через все этапы обслуживания от получения билета до приема жалобы, ниже багажного уровня — все этапы от проверки и сдачи багажа до его получения, и т. д. При этом на багажном уровне обслуживаются лишь те пассажиры, которые

прошли обслуживание на билетном уровне. То же самое справедливо и в отношении остальных уровней. Таким образом, обслуживание на каждом из уровней производится путем выполнения функций, относящихся к этому уровню, с использованием результатов обслуживания на всех предыдущих уровнях.

Итак, многоуровневая структура позволяет детально оценивать элементы большой и сложной системы, что уже является ее значительным достоинством. Кроме того, с использованием многоуровневой структуры легче модифицировать функции системы — для этого лишь нужно внести изменения в соответствующий уровень, при этом структурно-функциональная организация системы останется прежней. Так, например, усовершенствование системы регистрации будет сведено к внутренним изменениям регистрационного уровня, что никак не отразится на его функциях и не изменит структуру в целом.

Теперь давайте вернемся к компьютерным сетям и рассмотрим организацию сетевых протоколов. Как некоторые, возможно, уже догадались, протоколы, а следовательно, и все сетевое программное и аппаратное обеспечение организованы в виде уровней. Каждый протокол относится к определенному уровню сетевой коммуникационной модели. Обратите внимание на то, что протоколы распределены

21

между сетевыми компонентами, включающими оконечные системы и маршрутизаторы, подобно тому как функции обслуживания пассажиров распределены между аэропортами. Таким образом, каждое сетевое устройство взаимодействует с несколькими уровнями сети. Взаимодействие между компонентами на уровне п осуществляется с помощью специальных сообщений уровня п, которые называются единицами обмена (Protocol Data Unit, PDU) данного уровня. Содержание и формат подобных сообщений, а также правила их передачи определяются протоколом уровня п. Совокупность протоколов всех уровней коммуникационной модели называется стеком протоколов.

Когда уровень п хоста А посылает сообщение уровню п хоста В, внутри хоста А происходит передача сообщения уровню я - 1, который осуществляет обмен с уровнем п - 1 хоста В. Таким образом, обмен внутри сетевого уровня п всегда обеспечивается уровнем я — 1. Ключевым понятием для нас будет являться модель обслуживания уровня. Говорят, что уровень п - 1 предоставляет услуги уровню п. Например, в перечень услуг могут входить гарантированная доставка сообщений уровню п в течение одной секунды, безошибочная доставка сообщения и т. п.

Протоколы уровней Концепция протоколов уровней коммуникационной модели, на первый взгляд, может показаться сложной и не вполне понятной. Смеем

вас обнадежить, что картина быстро прояснится, когда мы начнем детально изучать коммуникационную модель Интернета, а пока попробуем разобраться в механизме многоуровневого обмена сообщениями между двумя хостами. Предположим, что некоторая компьютерная сеть использует четырехуровневую коммуникационную модель (эта сеть отличается от Интернета, где коммуникационная модель состоит из пяти уровней), как показано на рис. 1.22. Таким образом, в

сети существует четыре вида единиц обмена (PDU), соответствующих каждому уровню. Пусть приложение хоста А создает сообщение М, предназначенное приложению хоста В. Поскольку приложения находятся на вершине многоуровневой структуры, сообщение М относится к PDU уровня 4. Сообщение может включать в себя множество полей, подобно структуре или записи; содержимое полей интерпретируется приложениями. Обычно в PDU включается имя отправителя, тип сообщения, а также другая информация.

Рис. 1.22. Виды единиц обмена разных уровней в архитектуре протоколов

Сначала сообщение М передается с четвертого уровня на третий, где происходит расщепление исходного сообщения на две единицы обмена уровня 3, М, и М2. При этом к сообщениям присоединяются так называемые заголовки третьего уровня Н3, содержащие дополнительную информацию; необходимую для обслуживания сообщения М. Аналогичным образом полученные единицы обмена «спускаются» вниз по стеку протоколов с присоединением новых заголовков на каждом уровне. Единицы обмена уровня 1 передаются по линии связи хосту В, где снова поступают в стек протоколов. Далее происходит передача полученных единиц обмена «вверх» с отсоединением заголовков, и затем единицы обмена М, и М2 объединяются в исходное сообщение М, которое принимается приложением. Приведенный пример наглядно демонстрирует концепцию службы в коммуникационной модели: каждый уровень выполняет собственные обслуживающие функции, используя результаты обслуживания более высоких уровней.

Интересно заметить, что описанным выше образом обслуживание производится не только в компьютерных сетях. Рассмотрим, например, работу почтовых служб. Когда вы намереваетесь отправить письмо, на конверте вы указываете служебную информацию, включающую адреса получателя и отправителя. В данном случае вы являетесь наивысшим уровнем почтовой модели. Опуская письмо в почтовый ящик, вы посылаете его на более низкий уровень — уровень почтового отделения. Там на конверте будет поставлен штамп отделения и, возможно, добавлена какая-либо иная информация. Эти действия аналогичны присоединению заголовка уровня.

Опуская конверт в почтовый ящик, вы задействуете обслуживающие функции (услуги) почтовой службы, которая обязана обеспечить доставку письма адресату за определенное время. Вас не интересуют технические аспекты процесса доставки, которые целиком находятся в компетенции почтовой службы. Кроме того, почтовая служба сама является многоуровневой по структуре, и каждый уровень использует обслуживающие функции уровней, «младших» по иерархии.

Для успешного взаимодействия соседних уровней необходимо четкое определение интерфейса между ними. Обычно такое взаимодействие описывается документированными стандартами, рекомендуемыми к применению разработчиками аппаратного и программного сетевого обеспечения. Это несколько ограничивает «свободу творчества» разработчиков, однако позволяет защитить структуру коммуникационной модели.

Функции уровней

В компьютерной сети каждый уровень может выполнять одну или несколько функций, перечисленных ниже. Q Контроль ошибок обеспечивает повышение надежности логического канала между смежными уровнями сетевой модели.

Контроль потока позволяет избегать переполнения единицами обмена болеемедленного хоста.

Q Разбиение и сборка пакетов предназначены для изменения размеров единиц обмена на разных уровнях.

Мультиплексирование позволяет нескольким подключениям совместно использовать одно подключение более низкого уровня. Q Установка соединения есть выполнение процедуры рукопожатия между участниками обмена.

Снабжение каждого уровня коммуникационной модели собственным протоколом наряду с достоинствами имеет и несколько недостатков. Первый связан с нередко встречающейся ситуацией дублирования одних и тех же функций различными уровнями (например, контроль ошибок). Другой потенциальный недостаток заключается в том, что функциям одного уровня может понадобиться информация, хранящаяся на другом уровне (например, время). Это нарушает принцип изолированности уровней многоуровневой структуры.

24.Стек протоколов Интернета

Коммуникационная модель Интернета состоит из пяти уровней: физического, канального, сетевого, транспортного и прикладного. Вместо терминов «единица обмена сетевого уровня», «единица обмена канального уровня» и т. д. мы будем использовать специальные имена. Единицы обмена канального уровня мы назовем кадрами, единицы обмена сетевого уровня — дейтаграммами, единицы обмена

22

транспортного уровня — сегментами, а единицы обмена прикладного уровня — сообщениями. Для единиц обмена физического уровня обычно не предусматривается специального имени, и мы будем придерживаться этой традиции в нашей книге. Коммуникационная модель Интернета и единицы обмена ее уровней изображены на рис. 1.23.

Рис. 1.23. Стек протоколов Интернета и единицы обмена различных уровней

Поддержка протоколов может быть аппаратной, программной или смешанной. Протоколы прикладного уровня, такие как HTTP и SMTP, а также протоколы транспортного уровня практически всегда поддерживаются программно. Напротив, протоколы физического и канального уровней, тесно связанные со средой передачи данных, поддерживаются аппаратно сетевой интерфейсной картой. Сетевой уровень, находящийся в центре коммуникационной модели, может поддерживаться как аппаратно, так и программно. Далее даны характеристики каждого из пяти уровней коммуникационной модели Интернета.

Прикладной уровень Прикладной уровень, как следует из его названия, предназначен для поддержки сетевых приложений. Имеется множество протоколов

прикладного уровня, из которых наиболее важными являются HTTP (для путешествий по web-страницам), SMTP (для электронной почты)

иFTP (для обмена файлами). Как мы увидим в главе 2, разработка собственного протокола прикладного уровня не представляет особого труда.

Транспортный уровень Главная функция транспортного уровня заключается в передаче сообщений прикладного уровня между клиентом и сервером. В Интернете

существуют два транспортных протокола: TCP и UDP. Протокол TCP обеспечивает передачу с установлением логического соединения, то есть надежную передачу с контролем переполнения. Кроме того, TCP производит разбиение длинных сообщений на более короткие и контролирует перегрузку. Контроль перегрузки сводится к принудительному снижению скорости передачи оконечной системы при высокой загрузке сети. Протокол UDP обеспечивает передачу сообщений без установления логического соединения, то есть ненадежный вид связи, где допускаются искажения и потери данных.

Сетевой уровень Сетевой уровень обеспечивает передачу дейтаграмм между двумя хостами и базируется на двух основных протоколах. Первый протокол

определяет поля дейтаграммы

иинтерпретацию их содержимого маршрутизаторами и оконечными системами. Этот протокол является единственным протоколом сетевого уровня в Интернете и имеет название IP. Вторым протоколом является один из многочисленных протоколов маршрутизации, предназначенных для определения путей дейтаграмм от отправителя до адресата. Число протоколов маршрутизации огромно. Как мы неоднократно говорили, Интернет представляет собой сеть сетей, а каждая сеть поддерживает собственный протокол маршрутизации, обычно определяемый администратором сети. Несмотря на функциональные различия между протоколом IP и протоколами маршрутизации, а также на широкое разнообразие последних, их обычно объединяют под общим именем IP, подчеркивая этим их связующую роль в организации глобальной Сети.

Протокол транспортного уровня (TCP или UDP) передает сегмент и адрес назначения протоколу IP сетевого уровня подобно тому, как вы опускаете письмо в почтовый ящик, а протокол IP сетевого уровня доставляет сегмент конечному хосту и передает его обратно транспортному уровню.

Канальный уровень Сетевой уровень обеспечивает передачу пакета через серию маршрутизаторов между оконечными системами. Для перемещения пакета

(дейтаграммы) от одного узла к другому сетевой уровень прибегает к службам канального уровня. Таким образом, основная функция канального уровня заключается в передаче дейтаграмм между узлами на маршруте.

Канальный уровень использует специальный протокол, ориентированный на используемую линию связи. Иногда протоколы канального уровни обеспечивают надежную передачу между узлами. Обратите внимание на различие надежной передачи на транспортном и канальном уровнях: протокол TCP обеспечивает надежность на всем пути следования сообщения, а протокол канального уровня — лишь между парой узлов. К протоколам канального уровня относятся Ethernet и РРР; иногда аналогичные функции несут технологии асинхронной передачи данных (ATM) и ретрансляции кадров. Поскольку путь от отправителя до адресата обычно состоит из цепочки разнородных линий связи, передача дейтаграммы может осуществляться различными канальными протоколами.

Физический уровень Если назначением канального уровня является передача кадров между соседними узлами сети, то физический уровень обеспечивает

передачу между узлами отдельных битов информации. Протоколы физического уровня также напрямую зависят от использующейся линии связи (медной витой пары, одномодового оптоволокна и т. п.). Технология Ethernet поддерживает множество протоколов физического уровня, предназначенных для поддержки витой пары, коаксиального кабеля, оптоволоконного кабеля и некоторых других видов линий. В каждой из линий связи механизмы передачи бита различны.

Просмотрев оглавление этой книги, вы можете увидеть, что последовательность изложения материала соответствует направлению от прикладного уровня к физическому. Таким образом, мы реализуем заявленный нами ранее подход «сверху вниз».

Сетевые устройства и уровни коммуникационной модели

23

Рис. 1.24. Хосты, мосты, маршрутизаторы и поддерживаемые ими уровни коммуникационной модели

Наиболее важными сетевыми устройствами являются оконечные системы и коммутаторы. Как мы увидим далее, существуют два типа коммутаторов — мосты и маршрутизаторы. Понятие маршрутизатора вам знакомо и употреблялось уже неоднократно. Мосты будут подробно рассмотрены в главе 5, а детальное обсуждение работы маршрутизаторов проводится в главе 4. Как и оконечные системы, мосты и маршрутизаторы поддерживают многоуровневую структуру сети, однако они обслуживают лишь нижние уровни. Как можно видеть на рис. 1.24, мосты обслуживают только физический и канальный уровни, а маршрутизаторы — физический, канальный и сетевой уровни. Это объясняется тем, что маршрутизаторы способны поддерживать протокол IP, в то время как мосты не обладают такой возможностью. Вы сможете убедиться на практике в том, что мосты распознают не IP-адреса, а лишь адреса канального уровня (например, адреса Ethernet-сети). Хосты обслуживают все пять сетевых уровней; это говорит о том, что архитектура Интернета «сваливает» большую часть своей сложности «на плечи» оконечных систем.

Технология ASP Предшественники создания Первое решение: CGI

CGI-интерфейс (Common Gateway Interface) - одно из первых решений, созданных для доставки динамической Web-информации, он до сих пор очень популярен в мире UNIX. CGI-приложения - это программы, исполняемые на Web-сервере и обычно используемые для предоставления динамической Web-информации.

CGI - Common Gateway Interface является стандартом интерфейса, который служит для связи внешней программы с веб-сервером. Таким образом CGI – это интерфейс, позволяющий веб-серверу по запросу браузера пускать на себе какие-либо программы и результат их работы отдавать браузеру. Программу, которая работает по такому интерфейсу совместно с веб-сервером, принято называть шлюзом, многие больше любят названия скрипт или CGI-программа.

Сам протокол разработан таким образом, чтобы можно было использовать любой язык программирования, который может работать со стандартными устройствами ввода/вывода. А это умеет даже сама операционная система, поэтому часто если вам не требуется сложный скрипт, его можно просто сделать в виде командного файла.

Все скрипты, как правило, помещают в директорию cgi-bin сервера, но это совсем даже не обязательно, в принципе скрипт может располагаться где угодно только при этом большинство Web-серверов требуют специальной настройки.

В листинге 1-1 показан пример простого консольного CGI-приложения, которое отображает в браузере строку «Hello CCI World». Листинг 1-1. Простое CGI-приложение

// SayHelloCGI.cpp: npoc--£>e CGI-приложение II

ftlnclude-stdafx.rr ftinclude<stdio.h> int main(int argc, char* argv[]) i

printf< "HTTP/1, 0 200 OK\r\nContent-Type: text/html\r\r?\r\n"); printf("<HTML>\r\n<HEAD>");

printf("<TITLE>Hello CGI World</TITLEX/HEAD>\r\n"); printf<"<B0DY>\r\n<CENTER><H3>Hello CGI World</H3X/CENTER>"); printf{"<BR>\r\n</BODY>\r\n");

printf("</HTML>\r\nM); return 0; }

Эта очень простая CCI-программа выводит заголовок, и HTML-текст, которые отображаются в браузере.

Принципиально программа из листинга 1 представляет собой обычную программу, написанную на языке С, которую можно выполнять и на локальном компьютере. Ничто не мешает воспользоваться любым другим языком программирования или средой разработки и создать консольное приложение, считывающее со стандартного устройства ввода и записывающее в стандартное устройство вывода. В мире UNIX для создании CGI-программ применяется Perl, а среди поклонников Win32 популярна среда Delphi Borland, которая явно поддерживает CGI-приложения, предоставляя классы, управляющие чтением и записью в стандартные устройства.

Преимущества CGI

CGI-программа способна выполнять практически все, что вы пожелаете, - получать доступ к базам данных, считывать файлы, работать с системным реестром и все остальное, что обычно делает Win32-программа.

Если преподать программистам, имеющим опыт создания программ текстового режима, азы HTML, высока вероятность, что они сразу смогут создавать почти приличные CGI-программы. Такие программы просто тестировать, а цикл «программирование - тестирование — отладка» довольно прямолинеен. Достаточно настроить компилятор на сохранение исполняемого файла в нужном каталоге - и можно тестировать приложение, открывая соответствующую страницу в браузере и при необходимости возвращаясь к редактору, чтобы внести изменения.

Недостатки CGI

Чтобы понять недостатки CGI, следует поближе познакомиться с тем, что происходит при исполнении CGI-программы. Например, для вызова приложения, показанного в листинге 1-1, можно использовать следующий URL-agpec:

24

http: //localhost/sayhellocgi/saytiellocgi. exe

Возможен один из двух сценариев поведения сервера Microsoft Internet Information Services (IIS) при вызове этого URL-адреса: IIS либо предложит загрузить программу SayHelloCGI.exe с виртуального каталога sayhellocgi на локальную машину, либо выполнит ее. Естественно, нам нужно, чтобы программа выполнялась, для этого следует предоставить разрешение на исполнение в указанном виртуальном каталоге.

При наличии соответствующих разрешений после ввода URL-адреса SayHetloCCI.exe исполняется с информацией, поступившей через стандартное устройство ввода, и отправляет информацию, предназначенную стандартному устройству вывода, в браузер. Если в заголовках содержится ошибка (например, если отсутствует вторая пар; знаков «возврат каретки/перевод строки», завершающая заголовочный блок), одни браузеры просто проигнорируют текст, другие отобразят окно с сообщением об ошибке и выведут текст на стандартное устройство вывода. Выполнив свою задачу, CCI-программа завершает работу.

Модель CGI хороша тем, что после завершения работы Сопрограмму можно так же, как и любую другую программу, изменять или удалять; однако эта возможность является и недостатком CGI. При исполнении CGI-программа загружается, а по завершении работы полностью удаляется из памяти. Много ресурсов тратится на создание и удаление процессов. Создание процесса - более ресурсоемкая операция по сравнению, скажем, с простым считыванием HTML-файла. В конечном счете, подобное создание и удаление процессов сильно снижает производительность, а также перегружает ресурсы. Когда 100 клиентов одновременно обращаются к одной CGIпрограмме, в памяти создается 100 экземпляров этой программы. Ресурсы Web-сервера активно «пожираются», что отрицательно сказывается на масштабируемости. По мере развития Web-узлов от простых вспомогательных информационных каналов до крупных критически важных средств электронной коммерции становилось все более ясно, что необходимо решение, лишенное недостатков CGI.

ISAPl-интерфейс

Microsoft разработала для разработчиков новый способ создания масштабируемых приложений, который призван устранить присущие CGI проблемы с производительностью и масштабируемостью. Эта высокопроизводительная альтернатива называется ISAPI (Internet Server Application Programming Interface - API-интерфейс Интернет-сервера). Вместо исполняемых файлов в ISAPI используются DLLбиблиотеки, что позволяет повысить производительность и масштабируемость.

ВISAPI существуют два типа DLL-библиотек: ISAPI-расширения (ISAPI extensions) и lSAPI-фильтры(ISAP\filters). Первые явно указываются в URL-адресе, отправляемом на US-сервер, например, так:

http://localhost/sayhelloisap:/sayhelloisapi.dll

ISAPI-расширенис можно вызывать с параметрами, которые позволят одному компоненту выполнять разные задачи. Так же как в случае с CGI, в каталоге следует предоставить разрешения на исполнение, в противном случае DLL загружается на клиент, а не исполняется на сервере. ISAPI-расширения обычно применяются для обработки клиентских запросов и возвращения ответа в формате HTML. Это очень похоже на схему работы Сопрограмм.

ВCGI нет прямого аналога функциям, выполняемым JSAPI-фильтрами. ISAPI-фильтры никогда не вызываются явно - MS-сервер обращается к ним в ответ на определенные события в процессе выполнения запроса:

на завершение обработки сервером предоставленных клиентом заголовков; на завершение сервером процедуры аутентификации клиента;

на сопоставление сервером логического URL-адреса физическому;

• до начала пересылки «сырых» данных от клиента на сервер;

• на завершение пересылки «сырых» данных от клиента, но до начала их обработки на сервере; на регистрацию информации сервером в журнале; на завершение сеанса.

Как любой другой фильтр, ISAPI-фильтр должен запрашивать лишь нужные ему уведомления и обрабатывать их максимально быстро. Чаще всего ISAPI-фильтры применяются для поддержки особых процедур аутентификации. Другое применение — модификация HTMLтекста перед отправкой клиенту, например для изменения цвета фона страниц.

ВISAPI определено несколько точек входа в функции, экспортируемые из DLL. Эти точки входа позволяют IIS загружать DLL, вызывать реализованные в ней функции, передавая при необходимости нужные параметры, и получать данные для обратной отправки в браузер. ISAPI требует наличия реализации по крайней мере двух функции точки входа - CetExtensionVersion и НTTpExtensionProc.

ВISAPI устранены многие из недостатков CGI-приложений. В отличие от CGI-приложений, процессы которых создаются и уничтожаются с каждым запросом, код ISAPI-расширения обычно загружается лишь раз и на все время работы сервера (если только память не понадобится для других целей, что случается нечасто). В качестве дополнительного преимущества стоит упомянуть то, что ISAPIприложение выполняется в процессе IIS-сервера, обеспечивая ISAPI-расширению лучшую связь с IIS. В последних версиях IIS администратору предоставляется больший контроль над тем, в какой области памяти исполняются отдельные приложения, Обычно новые или сомнительные приложения работают в отдельном процессе, отличном от процесса самого IIS-сервера. Исполнение в существующем пространстве процесса и постоянное расположение в памяти обеспечивает существенные преимущества с точки зрения как производительности, так и масштабируемости.

Как и в CGI, одно ISAPI-приложение может выполнять разные задачи, принимая параметры, которые передаются в URL-адресе. Недостатки ISAPI

Почти все недостатки ISAPI относятся к процессу разработки ISAPI-приложений. Прежде всего, разрабатывать их сможет не всякий программист —для этого требуются знания C++ и MFC, а также HTML Сказать, что перечисленные наборы навыков никак не связаны друг с другом, значит, не сказать ничего. Хотя большинство программистов знакомы с MFC и многие из них знают HTML, тех, кто знаком и с тем, и с другим, не так уж и много. Разработчики, знающие MFC, скорее всего, разрабатывают традиционные Windows-приложения, для чего HTML не требуется. В отличие от других упомянутых в этой главе технологий разработки Интернет-приложений, разработку ISAPI-программ не так-то просто разделить на написание собственно приложения и создание интерфейсной части. ISAPI - это единая, монолитная DLL, и если не создавать собственные, доморощенные сценарии, дизайнеру интерфейса и разработчику прикладной бизнеслогики вряд ли удастся выполнить свои задачи изолированно друг от друга.

Кроме поиска нужных специалистов необходимо предусмотреть решение еще одной проблемы - тестирования различных версий DLLбиблиотеки. При этом если при тестировании приложения была выявлена ошибка и создана новая версия DLL, то после помещения ее на сервер необходимо перезагружать сервер, чтобы в память была загружена новая версия библиотеки, что создает дополнительные неудобства.

Помимо замены DLL-библиотеки на рабочем сервере, проблемы возникают при попытке отладки DLL. Для того, чтобы воспользоваться средствами отладки, например среды Visual C++, для ISAPI-приложения необходима достаточно тонка настройка среды и множество излишних действий.

Зарождение технологии ASP

Ранние принципы реализации технологии ASP во многом базируются на ее предшественниках CGI и ISAPI.

Первая версия технологии ASP была представлена в бета-версии сервера IIS 2.0, который стал частью Windows NT 4.0. Далее технология развивалась и, в конце концов, была кардинальным образом переработана, получив новые принципы разработки и выполнения программного кода, став частью технологии .NET, она получила название ASP.NET.

25

Как работает A SP

Если сказать упрощенно, то ASP – это технология активных скриптов, т.е. ASP-приложение представляет собой обычный текстовый документ, в котором HTML-код перемежается с особыми вставками, которые должны быть обработаны сервером, примерно как в РНР. Но, в отличии от РНР ASP не является языком программирования, а именно технологией, так как сами ASP-скрипты могут быть написаны с использованием различных языков программирования, даже в рамках одного ASP-документа. Одним из наиболее популярных языков программирования используемым совместно с ASP является VBasic, в силу своей простоты и доступности.

При этом если заглянуть поглубже в принцип преобразования ASP-сценариев в HTML-документы, которые непосредственно возвращаются сервером браузеру, то окажется, что обработка ASP-вставок в документе осуществляется сервером IIS с использованием ISAPI путем сопоставления ISAPI-расширения страницам с расширением .asp.

Преимущества ASP

Технология ASP мгновенно стала популярной, в значительной степени этому способствовала ее способность упрощать задачи, ранее казавшимися сложными (создание динамического Web-содержимого). Создавать CGI- u ISAPI-приложения не так уж трудно, но работа с ASP намного проще.

По умолчанию в ASP используется VBScript. Можно без преувеличения сказать, что миллионы разработчиков по крайней мере немного знакомы с Visual Basic, Visual Basic for Applications (VBA) или VBScript. Для них ASP стал именно тем способом, который позволил войти в мир Интернета. Конечно же, они могли бы изучить новый язык программирования, но в ASP этого не требовалось. Отчасти из-за поддержки VBScript технология ASP стала жизнеспособным методом создания Web-приложений.

Также важным фактором оказался относительно простой доступ к базам данных, осуществляемый посредством Microsoft ActiveX iData Objects (ADO). При создании динамического информационного наполнения соответствующую информацию нужно где-то брать, и технология ADO позволяла легко извлечь нужные данные.

Наконец, и это, возможно, наиболее важный фактор, модель разработки в ASP позволила разработчикам эффективно писать и исполнять программы. Не нужно никакой компиляции или сложных операций по установке.

Недостатки ASP Запутанный код

Разрешение перемежать стандартный HTML-код с ASP-скриптами, достаточно быстро привело, к тому, что исходный код более-менее крупных страниц стал достаточно трудно читаем.

Снижение производительности приложения

При использовании смешанного стиля кодирования значительно падает производительность приложения, так как при этом ISAPIинтерфейс работающий на Web-сервере должен включиться и выключиться несколько раз лишь для того, чтобы обработать каждый отдельный запрос ASP.

Если же реализовывать всю страницу в едином ASP-теге, то это ведет к «замусориванию» кода инструкциями вывода строк, которые просто впечатывают в документ HTML-теги и статический текст.

Каждый объект или переменная, которые используются в классическом ASP-сценарий, относится к универсальному типу данных (variant). Недостатком такого типа данных является то, что объекты данного типа слабо поддаются контролю. Они требуют больших объемов, памяти, динамически связаны и приводят к снижению производительности. Более того, компилятор и различные инструментальные средства не могут идентифицировать их во время разработки. Это сделало практически невозможным создание действительно интегрированной среды разработки, которая могла бы предложить программистам на ASP что-либо похожее на мощную отладку, средство IntelBSense и проверку ошибок, которые можно найти в Visual Basic и Visual C++. Без инструментов отладки программисты на ASP были вынуждены самостоятельно выявлять неполадки в своих сценариях.

Платформа .NET

Одним из революционных моментов в области программирования явилось появление технологии .NET, принесшей новые принципы разработки, выполнения и обеспечения совместной работы программ. Перечислим основные преимущества платформы .NET.

.NET Framework - архитектура, облегчающая проектирование традиционных и Web-приложений, предоставляющая универсальные библиотеки для упрощенной разработки приложений.

Единый язык среды исполнения (Common Language Runtime) обеспечивает единый набор сервисов для приложения, вне зависимости от того, на каком из языков платформы оно написано.

Компилируемые языки. При использовании платформы .NET обеспечивается повышенная производительность с помощью компилируемых языков и особых принципов выполнения программ. Кроме того, компилируемые языки позволяют разработчику проверить по крайней мере синтаксическую корректность исходного текста.

Замечательные новые языки. Visual Basic.NET — это совсем .новая версия Visual Basic с новым, более четким синтаксисом.

С# (произносится как «си-шарп») - новый язык, очень похожий на C++ , но лишенный некоторых опасных особенностей, которые затрудняют создание надежных приложений на C++.

Visual Studio .NET - новая среда разработки, которая поддерживает быструю разработку (Rapid ApplicationDevelopment, RAD) серверных приложений.

Улучшенные компоненты. Каркас.NET Framework поддерживает использование новых типов компонентов, которые очень просто заменять в работающих приложениях.

Web-формы позволяют программировать в стиле Visual Basicс использованием обработчиков событий в стандартных элементах управления HTML.

■• Web-сервисы в поддержкой XML позволяют разработчикам создавать сервисы и предоставлять доступ к ним по протоколам, являющимся отраслевым стандартом.

■• ADO.NET. ADO в .NET Framework - новая версия этой технологии, которая упрощает доступ из ASP.NET-приложений к данным реляционных БД и данных в других форматах, например XML.

В момент совместного выпуска ASP версии 3.0 и Windows 2000 стало очевидным, что будущее разработки программ тесно связано с будущим Web. В качестве части инициативы .NETкорпорация Microsoft предстазила ASP.NET - новую версиюASP — где сохранена модель разработки, которая хорошо знакома и так полюбилась ASP-программистам: достаточно создать программу и поместить ее в нужный каталог с корректными разрешениями, и она будет работать. В ASP.NET представлены новшества, которые обеспечивают более простое деление на само приложение и собственно представление.

В ASP.NET появилось много новых функции, а существовавшие в «классической» ASP значительно усовершенствованы. ASP.NET -это не просто новая версия ASP, а действительно совсем новый продукт, хотя и предоставляет разработчикам туже методологию, которая им так понравилась в ASP. Вот перечень самых важных особенностей ASP.NET.

ASP.NET 1.0

Разработчики Microsoft описали ASP.NET как свой шанс "нажать на кнопку пег резапуска" и начать работу с полностью новой, более современной моделью разработки. Традиционные концепции, включенные в создание Web-приложений, до сих пор действительны в мире

.NET. Каждое Web-приложение состоит из Web-страниц. Вы можете визуализировать объемный код HTML и даже использовать JavaScript, создавать компоненты, инкапсулирующие программную логику, и настраивать приложения с использованием параметров

26

конфигурации. Однако "за сценой" ASP.NET работает совсем иначе, нежели традиционные технологии написания сценариев, подобные классической системе ASP или PHP. Он также более "претенциозен", чем JSP (Java Server Pages — серверные страницы Java). Преимущества ASP. NЕТ

1. ASP.NET интегрирована с .NET Framework

Среда .NET Framework содержит тщательно отобранную коллекцию функциональных частей с поразительным общим количеством — более 7000 типов (термин .NET для классов, структур, интерфейсов и других основных составных частей программирования).

Обширная коллекция функций, предлагаемая .NET Framework, организована таким способом, что каждый из тысяч классов в; .NET Framework сгруппирован в логический иерархический контейнер под названием пространство имен. Различные пространства имен предоставляют различные возможности, ориентированные на разные аспекты разработки — от организации очередей сообщений до, безопасности.

Способ использования классов .NET Framework в ASP.NET ничем не отличается от способа их применения в любом другом типе приложения .NET (включая автономное Windows-приложение, Windows-службу, утилиту командной строки и тому подобное). Иначе говоря, .NET предоставляет Web-разработчикам те же инструменты, что и win-разработчикам, что значительно повышает доступность web-разработки.

3. ASP.NET поддерживает несколько языков

Несмотря на то, что при разработке приложений вы наверняка отдадите предпочтение какому-то одному языку перед другими, этот выбор не определит то, чего вы сможете достигнуть с помощью своих Web-приложений, поскольку какой бы язык вы не использовали, код компилируется в IL.

IL является конечной целью каждого управляемого приложения. (Управляемым (managed) приложением называется любое приложение, написанное для .NET и выполняющееся внутри управляемой среды CLR). В известном смысле IL является языком ,NET и единственным языком, распознаваемым CLR.

Общая спецификация языков

Общая спецификация языка (CLS) определяет стандартные свойства, которыми должны обладать все объекты для связи друг с другом в однородной среде. Для обеспечения этой связи CLR ожидает от всех объектов соответствия определенному набору правил.

CLS и представляет собой набор этих правил. Правила определяют законы, которым должны следовать все языки, такие как ключевые слова, типы, примитивные типы, перегрузки методов и тому подобное. Любой компилятор, генерирующий код IL для исполнения в CLR, должен придерживаться всех правил, устанавливаемых CLS. CLS позволяет разработчикам, поставщикам и производителям программного обеспечения не выходить за пределы общего набора правил для языков, компиляторов и типов данных. С течением времени появится еще больше языков и компиляторов, соответствующих CLS, хотя несколько уже доступны.

Наличие этих критериев может усложнить создание компилятора языка, генерирующего истинный CLR-совместимый код. Однако компиляторы могут существовать практически для любого языка, который вы собираетесь использовать. Только представьте себе — программисты на мэйнфреймах, которые предпочитали COBOL в период его расцвета, теперь могут воспользоваться своей базой знаний при создании Web-приложений!

2. ASP.NET компилируется, а не интерпретируется

Одна из основных причин снижения производительности в ASP-сценариях связана с тем, что во всем коде Web-страницы ASP используются интерпретируемые языки написания сценариев. Это означает, что при выполнении приложения хосту сценариев на серверной машине необходимо интерпретировать ваш код и построчно преобразовать его в низкоуровневый машинный код. Этот процесс печально известен своей низкой скоростью.

Приложения ASP.NET всегда компилируются вне зависимости от своей направленности web или win. Кроме того .NET использует особую модель компиляции, которая совмещает в себе преимущества моделей выполнения программ «традиционной» компиляции и интерпретации.

Модель компиляции для .NET приложения состоит из двух этапов. На первом этапе код, написанный на любом из языков .NET, компилируется в код промежуточного языка под названием Microsoft Intermediate Language (MSIL), или просто IL. Этот первый шаг является фундаментальной причиной взаимозависимости .NET от языков. По сути, все языки .NET (включая С#, Visual Basic и многие другие) компилируются в фактически идентичный код IL. Скомпилированный файл с кодом IL в терминах платформы .NET называется

сборкой.

Второй этап компиляции наступает непосредственно перед фактическим выполнением страницы. На этом этапе код IL компилируется в низкоуровневый собственный машинный код. Этот этап известен как оперативная компиляция "точно к нужному моменту" (Just-In-Time

— JIT) и он проходит одинаково для всех приложений .NET (включая, например, приложения Windows). На рис. 1.1 показан этот двухэтапный процесс компиляции.

27

Рис. 1.1. Компиляция в рамках Web-етоаницы ASP.NET

Такая модель компиляция .NET предоставляет разработчикам удобные условия и обеспечивает мобильность создаваемых приложений. Перед созданием низкоуровневого машинного кода компилятору необходимо знать, в какой операционной системе и на каком базовом оборудовании будет функционировать приложение (например. 32или 64-рааряднаа ОС Windows). Благодаря двум этапам компиляции, можно создать скомпилированную сборку с кодом .NET и распределить ее на более чем одну платформу.

4. ASP.NET функционирует внутри исполняющей среды CLR

Вся среда .NET Framework — то есть все пространства имен, приложения и классы — называется управляемым кодом, который выполняется не непосредственно на процессоре, а в рамках управляемой среды выполнения CLR. Т.е. можно сказать, что он выполняется на виртуальном процессоре, что предоставляет некоторые преимущества:

Автоматическое управление памятью и сборка мусора. Каждый раз, когда приложение создает экземпляр объекта, CLR выделяет для него пространство памяти в управляемой куче. Однако вам никогда не придется очищать эту память вручную. Как только ссылка на объект выходит за пределы области видимости (или приложение завершается), объект становится доступным для сборщика мусора. Сборщик мусора периодически запускается внутри CLR, автоматически восстанавливая неиспользованную память для недоступных объектов. Эта модель избавляет от низкоуровневых деталей манипулирования памятью C++ и от запутанности подсчета ссылок СОМ.

Безопасность типов. При компиляции приложения .NET добавляет к сборке информацию о доступных классах, их членах, типах данных и тому подобном. Это приводит к полной самостоятельности скомпилированных сборок кода. Другие разработчики могут использовать их без запроса каких-либо других файлов поддержки, и компилятор может проверять допустимость каждого обращения во время выполнения. Этот дополнительный уровень безопасности полностью избавляет от возникновений низкоуровневых ошибок наподобие печально известного переполнения буфера,

Расширяемые метаданные. Информация о классах и элементах является лишь одним из типов метаданных, хранимых .NET в скомпилированной сборке. Метаданные описывают код и позволяют предоставлять дополнительную информацию исполняющей среде или другим службам. Например, эти метаданные могут сообщить отладчику о том, как трассировать(отлаживать) код, или же сообщить Visual Studio о том. как отображать специальный элемент управления во время проектирования.

Структурированная обработка ошибок. Допускается создавать отдельные блоки для работы с различных типов ошибок, что позволяет более логично и лаконично организовать код обработки ошибок.

Многопоточность. CLR предоставляет пул потоков, которые могут использоваться различными классами. Например, можно асинхронно вызывать методы, читать файлы либо взаимодействовать с Web-службами без необходимости явного создания новых Потоков.

5. ASP.NET является объектно-ориентированной

ASP поддерживает относительно слабую объектную модель с достаточно скудным набором объектов; эти объекты в действительности представляют собой лишь тонкий уровень, скрывающий подробности HTTP и HTML. Напротив, ASP.NET является объектноориентированной средой, код web-приложения имеет полный доступ ко всем объектам в .NET Framework, а также в приложениях, написанных с использованием ASP.NET можно эксплуатировать все условные обозначения объектно-ориентированного программирования (ООП). Например, можно создавать повторно используемые классы, стандартизовать код в соответствий с интерфейсами и объединять полезные функции в распределяемом скомпилированном компоненте.

Один из лучших примеров объектно-ориентированного мышления в ASP.NET можно найти в серверных элементах управления. Разработчики могут программно манипулировать объектами управления с использованием кода для настройки их внешнего вида, предоставления данных для отображения и даже реакции на события. Низкоуровневые подробности HTML спрятаны "за сценой". Вместо того чтобы вынуждать разработчика писать "сырой" HTML вручную, объекты управления преобразуются в HTML по завершении визуализации страницы. Таким образом, ASP.NET предлагает серверные элементы управления в качестве способа устранения низкоуровневых подробностей программирования на HTML и HTTP.

Набор элементов управления Web в ASP.NET содержит сложные генерируемые элементы управления (подобные Calendar и TreeView), а также усовершенствованные элементы управления (такие как TextBox, Label и Button). В последнем случае варианты серверного элемента управления HTML и элемента управления Web ASRNET обеспечивают похожую функциональность. Это упрощает изучение элементов управления Web и делает их подходящими для разработчиков Windows, ориентированных на Web, поскольку большинство имен свойств похожи на имена соответствующих элементов управления Windows.

6. ASP.NET поддерживает множество устройств и браузеров

Одним из самых сложных испытаний, предстоящих Web-разработчикам, является большое количество браузеров, которые необходимо поддерживать. Различные браузеры, версии и конфигурации по-разному поддерживают HTML. Web-разработчики должны выбирать,

28

следует ли формировать содержимое в соответствие со стандартом HTML 3.2, HTML 4.0 или же с чем-либо другим вроде XHTML 1.0 или даже WML (Wireless Markup Language — язык разметки для беспроводных систем) для мобильных устройств. Эта проблема, усугубляемая различными компаниями, выпускающими браузеры, преследовала разработчиков с тех пор, как консорциум World Wide Web Consortium предложил первую версию HTML. Жизнь еще более усложнялась при использовании расширений HTML, таких как JavaScript, для создания более динамических страниц или верификации.

ASP.NET решил эту проблему удивительно разумным способом. Несмотря на то что вы можете извлекать информацию о браузере клиента и его свойствах внутри страницы ASP.NET, ASP.NET фактически побуждает разработчиков игнорировать эти соображения и использовать обширный набор элементов управления Web-сервера. Эти серверные элементы управления генерируют HTML, адаптируясь к возможностям клиента. Одним из примеров являются элементы управления верификацией ASP.NET, использующие JavaScript и DHTML (динамический HTML) для совершенствования своего поведения, если оно поддерживается клиентом. Это позволяет элементам управления верификацией отображать сообщения о динамических ошибках без необходимости отправки пользователем страницы серверу для продолжения обработки. Эти свойства необязательны, но они демонстрируют то, как интеллектуальные элементы управления могут составлять большую часть современных браузеров без перекрытия других клиентов. Но самое лучше заключается в том, что вам не нужны дополнительные работы по кодированию для поддержания обоих типов клиента.

7. ASP.NET легко развертывается и конфигурируется

Одной из самых сложных проблем, предстающих перед разработчиками, является развертывание готового приложения на производственном сервере. Необходимо не только переместить файлы Web-страниц, базы данных и компоненты, но также зарегистрировать компоненты и повторно создать множество параметров конфигурации. В ASP.NET этот процесс существенно упрощен.

Каждая инсталляция .NET Framework предоставляет одинаковые базовые классы. Поэтому развертывание приложений. ASP-NET является относительно простым. В большинстве случаев просто потребуется скопировать все файлы в виртуальный каталог на производственном сервере (с использованием программы FTP иди даже команды, подобной XCOPY).

Распространение компонентов, используемых вашим приложением, также является легким. Необходимо лишь скопировать сборки компонентов при развертывании Web-приложения. Поскольку вся информация о вашем компоненте хранится прямо в метаданных файла сборки, потребность в запуске программы регистрации или изменении системного реестра Windows отсутствует. Как только вы поместите эти компоненты в правильное место (подкаталог каталога Web-приложения), Механизм ASP.NET автоматически определит их наличие и сделает доступными вашему коду Web-страницы.

Конфигурирование является еще одной задачей, связанной с развертыванием приложения, в особенности при необходимости передачи информации о безопасности, такой как учетная запись и привилегии пользователя. ASP.NET упрощает процесс развертывания, сводя к минимуму зависимость от настроек IIS (Internet Information Services — информационные службы Internet). Вместо этого большинство установок ASP.NET хранится в специальном файле web.config.

Файл web.config помещается в тот же каталог, что и Web-страницы. Он содержит иерархически сгруппированные настройки приложения, хранимые в удобочитаемом формате XML, который можно редактировать с использованием простого текстового редактора. При изменении настройки приложения ASP.NET замечает это изменение и перезапускает приложение.

ASP.NET 2.0

Выпустив ASP.NET 1.0, компания Microsoft не ожидала того энтузиазма, с которым была принята эта технология. Среда ASP.NET быстро превратилась в стандарт разработки Web-приложений с помощью технологий Microsoft и стала серьезным конкурентом всех остальных платформ Web-разработки.

Благодаря хорошо спроектированной структуре ASP.NET 1.0 и 1.1, лишь несколько изменений в ASP.NET 2.0 стали дополнениями к существующим свойствам. ASP.NET 2,0 сосредоточена на добавлений новых свойств более высокого уровня. Иначе говоря, ASP.NET 2.0 содержит большее количество свойств и инструментов, повышающих производительность разработчика. Целью этого, как утверждает команда создателей ASP.NET, является сокращение на 70% количества строк кода, которые требуется написать.

Официально среда ASP.NET 2.0 обратно совместима с ASP.NET 1.0. В действительности же стопроцентной обратной совместимости, как правило, не существует, поскольку исправление неполадок и противоречивостей в языке может изменить работу существующего кода. Конечно, ASP.NET 2.0 не просто добавляет новые свойства. Она также рационализирует производительность и упрощает конфигурирование с помощью нового инструмента под названием WAT (Website Administration Tool — инструмент администрирования Web-сайтов).

УРОК 1.

Создание HTML-страницы

В силу своей специфики Web-документы должны создаваться на основе некоторых правил. Чтобы обеспечить согласованность Webдокументов с этими правилами, а также сделать возможной проверку их корректности, в Web-документах должны присутствовать определенные элементы. Согласованность означает, что Web-документ на самом деле соответствует языку и версии языка, на котором он был написан. Проверка корректности – это технический процесс, с помощью которого проверяется согласованность Web-документов и благодаря которому мы получаем возможность находить и исправлять в них ошибки.

Чтобы обеспечить согласованность Web-документов, их создание следует начинать с указания всех обязательных структурных элементов, которые должны присутствовать в документе перед добавлением текста и другого содержимого.

Также зачастую, при создании сайта необходимо учитывать, что основным программным обеспечением, используемым для интерпретации языка HTML, является настольный Web-браузер. Каждый из браузеров имеет технические ошибки, а также зачастую произвольно трактует те или иные конструкции языка HTML или даже привносит свои. В итоге на сегодняшний день существует множество «диалектов» языка HTML большинство из которых не соответствует спецификации и не является корректным.

Мы будем рассматривать язык XHTML, который является расширенной версией языка HTML более жесткими правилами, заимствованными в основном из языка XML. Например, в языке XHTML регистр символов имеет значение и все теги должны быть закрытыми.

Объявление и идентификация документа Первым делом в документ необходимо добавить фрагмент кода, с помощью которого будет объявлен тип используемого документа и

идентифицирована версия языка. Это осуществляется при помощи Стандартного Обобщенного Языка Разметки (Standardized General Markup Language - SGML), который является предком языка HTML и используется в этом важном объявлении, известном как объявление DOCTYPE. Объявление DOCTYPE является уникальным фрагментом кода, и поэтому во всех создаваемых документах должно использоваться подходящее объявление.

Пример:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtmll/DTD/xhtmll-transitional.dtd">

Разберем пример объявления типа документа

<! – открывающая последовательность. Этот символ применяется редко, поскольку это использование синтаксиса языка SGML в контексте языка HTML.

За открывающей последовательностью символов следует элемент DOCTYPE, обозначающий тот факт, что данный код объявляет тип документа.

29

Следующим элементом является html, что говорит о том, что этот документ написан на языке HTML.

Слово PUBLIC является важной частью информации. Это означает, что класс документа, в котором используется данное объявление, является открытым. Множество компаний создают уникальные версии языка XHTML с собственными элементами и атрибутами. Следующий синтаксис "-//W3C//DTD XHTML 1.0 Transitional//EN" определяет узел, на котором хранится тип и версия языка документа (Консорциум World Wide Web, W3C), и отражает тот факт, что документ написан в соответствии с определением типа документа

(Document Type Definition, DTD) языка XHTML 1.0 Transitional.

Определение DTD - это просто длинный список разрешенных элементов и атрибутов для данного языка и его версии.

Запись "http://www.w3.org^FVxhtml1/DTD/xhtml1-transitional.dtd" представляет собой полный адрес URL, определяющий местоположение определения DTD,. Если в браузер загрузить документ, находящийся по этому адресу, мы увидим определение DTD для языка XHTML 1.0 Transitional.

Разместив это объявление в самом начале документа, можно создавать документ и выполнять проверку на согласованность при помощи средства проверки корректности. Средство проверки корректности использует информацию в объявлении и сравнивает документ с определением DTD, указанным в объявлении. Если при создании документа использовались допустимые в указанном определении DTD правила, то при проверке никаких ошибок найдено быть не должно, что, конечно же, и является нашей целью.

Добавление элемента html

После объявления DOCTYPE создание документа начинается с корневого элемента. Термин корневой, использован специально, поскольку у каждого документа есть дерево документа. Понятие дерева, создаваемого HTML-документами, играет важную роль в их эффективной стилизации с использованием языка CSS.

Элемент html считается корневым элементом любого HTML-документа.

Вязыке XHTML к открывающему тегу необходимо добавить еще один компонент: пространство имен XML для языка XHTML. Это всего лишь еще один способ идентификации языка, используемого в документе.

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> </html>

Впримере используется атрибут xmlns, название которого представляет собой сокращение от словосочетания «XML namespace», и его значение, представляющее собой адрес URL.

Элемент head

Элемент head содержит все элементы, необходимые для отображения и выполнения документа, но которые не отображаются в окне браузера. Чтобы создать раздел head, необходимо просто добавить теги head в верхнюю часть шаблона, непосредственно за открывающим тегом <html>, как показано в примере 1.4.

Пример 1.4. Создание шаблона: добавление раздела head

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtmll/DTD/xhtmll-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"

lang="en">

<head>

</head>

</html>

Обратите внимание, что у элемента head нет обязательных атрибутов, а есть только открывающие и закрывающие теги. Так обозначается раздел head.

Втаблице 1.1 перечислено несколько различных элементов, которые можно размещать внутри раздела документа head.

Табл. 1.1. Элементы в разделе документа head

Элемент

Назначение

 

 

 

title

Этот элемент позволяет задать заголовок документа. Указанный заголовок будет отображаться в строке заголовка

 

браузера. Элемент title является обязательным.

 

 

 

meta

Элемент meta используется для множества целей, включая указание ключевых слов и описаний, кодировки

 

символов и автора документа. Элемент meta не является обязательным и его использование может варьироваться в

 

зависимости от поставленных задач.

 

 

 

script

Этот элемент позволяет вставлять скрипты непосредственно в документ

, или, что более предпочтительно, с его

 

помощью указывается ссылка на необходимый для использования

скрипт. Элемент используется при

 

необходимости.

 

 

 

 

style

Элемент style позволяет размещать информацию о стиле прямо на странице. Стиль, информация о котором

 

размещена таким образом, называется встроенным. Элемент используется при необходимости.

 

 

 

link

Элемент link наиболее часто используется для выполнения связывания с внешней таблицей стилей, хотя он может

 

применяться и для других целей, например для связывания с альтернативной страницей, реализующей специальные

 

возможности, или для связывания со значком сайта - это те популярные значки, которые отображаются в строке

 

адреса некоторых Web-сайтов.

 

 

 

Элемент title

Элемент title является единственным обязательным элементом раздела head. В строке заголовка браузера отображается любой текст, содержащийся в этом элементе, вместе с названием браузера, которое добавляется в конец текста.

Элемент meta

Хотя его наличие в документе не обязательно, элемент meta выполняет множество различных функций. Кодировка документа

Кодировка документа означает установку набора символов для страницы, что особенно важно при создании документов на других языках. В идеале, кодировка символов должна устанавливаться на сервере, а не с помощью элемента meta. Однако установить кодировку можно и при помощи элемента meta.

Пример Использование элемента meta для объявления кодировки документа Unicode <meta http-eguiv="Content-Type" content="text/html; charset= UTF-8" />

Ключевые слова, описание и авторство

Элемент meta можно использовать для определения ключевых слов, описания сайта, а также для указания автора. Это используется для индексирования сайта в поисковых системах.

Ключевые слова - это отдельные слова и комбинации слов, используемые при поиске.

30

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]