13 лет назад 9 ноября 2006 в 15:05 214

Все файлы Сети

Тим Бернерс-Ли – человек, создавший World Wide Web, – летом в Финляндии получил награду Millennium Technology Prize в размере одного миллиона евро. Этот год вообще для него стал годом признания заслуг перед человечеством. Например, 16 июля Королева Английская Елизавета II посвятила его в Командоры Ордена Британской Империи, после того как в прошлом году она же даровала ему звание офицера этого Ордена за “вклад в глобальное развитие интернета”.

Сегодня для многих аббревиатура WWW стала символом интернета. Однако глобальная компьютерная сеть существовала задолго до того, как Тим Бернерс-Ли в 1991 году запустил свой первый веб-узел. Официальной датой создания интернета считается 29 октября 1969 года. В этот день между собой были связаны два первых узла ARPANet, удаленные на расстояние 500 км. Коннект в свою очередь стал возможен благодаря тому, что 1 сентября 1969 года компания BBN изготовила первый в истории модем, то есть устройство, обеспечивающее связь между компьютерами по телефонным линиям.

Устройство получило название Interface Message Processor. До 1980 года число узлов ARPANet возросло до нескольких десятков, заработала электронная почта. К 1990 году был принят двойной протокол TCP/IP, который используется и поныне, и была принята система доменных имен DNS (Domain Name System). Вот тут-то на сцену и вышел Тим Бернерс-Ли.

Есть мнение, что Тим Бернерс-Ли изобрел гипертекст. Однако это не совсем верно. Идея гипертекста принадлежит Вэнниверу Бушу. Еще в 1945 году в статье “Пока мы мыслим” он описал устройство Memex, которое можно назвать концептуальным прототипом World Wide Web (подробнее – см. Upgrade # 24 (114)). Гипертекст – это, так сказать, безразмерный текст, в который входит как явный видимый набор страниц, так и их неявное множество, представленное ссылками. Ссылки в обычном тексте представлены достаточно произвольно (как, например, сделал я, указав номер журнала, в котором можно найти дополнительную информацию о В. Буше). Однако по такой ссылке сложно искать нужный фрагмент. Более правильнее, если бы эта ссылка имела следующий вид: Upgrade # 24 (114)), стр. 43, первая колонка слева, шестая строка сверху. По такой ссылке гораздо легче получить нужную информацию.

Строго говоря, идея гипертекста не принадлежит и Вэнниверу Бушу. Первый из известных настоящих гипертекстов – это Библия, которая представляет собой целый набор книг (порой, правда, не совсем логически состыкованных друг с другом, но для гипертекста это обычная история). Еще в раннюю эпоху христианства все книги Библии были разбиты на небольшие главы, а внутри каждой главы был пронумерован каждый абзац. Это было сделано для удобства и безопасности теологических споров. Потому как за неверное цитирование (или невозможность доказать, что цитата точная) запросто можно было угодить в еретики со всеми вытекающими последствиями. А благодаря превращению Библии в гипертекст какой-нибудь ученый муж церкви мог спокойно обрушить на голову другого мужа что-нибудь вроде “земле Содомской отраднее будет в день суда, нежели тебе” и, кратко добавив: “Мат., 11, 24”, быть уверенным, что никто к нему не придерется за неправильность цитаты. Второй ученый муж – его оппонент – лез в Евангелие от Матфея, главу 11, стих 24 и, перепроверив точность цитаты, едко парировал: “Тебе говорю: встань, возьми постель твою и иди в дом твой, Марк, 2, 11”. Примерно так они мило общались друг с другом на разных Соборах.

Это, конечно, была чистейшей воды схоластика. Но, между прочим, именно благодаря этой схоластике позднее смогла развиваться наука. Ибо двигателем науки во все времена были научные споры, которые в свою очередь были невозможны без точной ссылки на более авторитетных предшественников. Собственно, именно эта идея и двигала Тимом Бернерсом-Ли – он хотел создать гипертекст научных документов. И его заслуга перед человечеством заключается в том, что он создал технологию, позволяющую на основе уже существующей глобальной компьютерной сети с ее протоколами межсетевого обмена и службами доменных имен развернуть удобный гипертекст. Этот гипертекст был назван World Wide Web, а сам механизм, позволивший его создать, – языком разметки гипертекста, Hypertext Markup Language, или проще говоря HTML.

IP, DNS и URL

Для осуществления доступа к любому файлу на локальном компьютере программа должна знать имя диска и его полное имя, которое состоит из собственно имени файла и полного так называемого пути – всей ветки каталогов и подкаталогов, ведущих к этому файлу. Для доступа к файлу по технологии, предложенной Тимом Бернерсом-Ли, каждый файл должен быть описан набором атрибутов, в который входит, в том числе, и номер компьютера в сети. Номер компьютера в сети называют IP-адресом (от англ. index pointer – точка указания), и он состоит из четырех восьмибитных частей, называемых октетами (от лат. octa – восемь).

Для пользователя было бы весьма обременительно каждый раз указывать малопонятный код, состоящий из четырех разделенных точками чисел. Так что для облегчения жизни была создана служба доменных имен – DNS (Domain Name Service). IP-адрес заменен символьным эквивалентом, называемым универсальным локатором ресурсов – URL (Universal Resource Locator). Все URL имеют стандартный формат <схема доступа><общая информация>. В самом привычном для большинства пользователей виде схема доступа содержит информацию о протоколе, при помощи которого клиентская программа – веб-браузер – обменивается данными с сервером. Привычные для всех (и для многих непонятные) символы HTTP обозначают протокол передачи гипертекста (hypertext transfer protocol). Еще один часто используемый протокол – FTP (file transfer protocol) – служит для обмена файлами между клиентом и сервером. Какая же разница между HTTP и FTP?

По сетевым каналам связи передаются отдельные биты, которые складываются в байты. Но что это за байты, как их интерпретировать? На этот вопрос отвечает протокол – набор правил интерпретации полученных данных. При работе по протоколу HTTP браузер “понимает”, что поступившие байты – это описанный на языке HTML документ, который необходимо отобразить. Если же задан протокол FTP, то полученные данные браузер никак не интерпретирует, а просто сохраняет их в указанном месте в виде файла.
Точная связь между IP и URL устанавливается в базах данных DNS, представляющих собой обычные таблицы, в которых каждому “чистому” URL (то есть адресу вида www.name.ru) соответствует IP сервера, на котором хранится веб-ресурс, загружаемый по этому URL. Если веб-страница переносится на другой сервер, достаточно изменить IP-адрес в базе. Служба DNS отвечает за актуальность всех зональных баз данных, то есть вновь созданный и зарегистрированный URL должен через какое-то время оказаться в базах DNS по всему миру.

HTML

Чаще всего браузер работает по протоколу HTTP. Такие клиенты, как Microsoft Internet Explorer, могут работать и по FTP, но большинство пользователей для закачки файлов из интернета (или, напротив, для обновления своего личного веб-сайта) используют специальные ftp-клиенты – программы, которые позволяют работать в Сети на файловом уровне более комфортно, чем обычные веб-браузеры. В общем, FTP мы больше трогать не будем.

Итак, гипертекст в WWW состоит из отдельных html-документов, связанных друг с другом. Это обычные текстовые файлы (ascii-файлы), имеющие расширение HTM или HTML. Язык HTML никоим образом невозможно использовать для описания структуры веб-узла. Когда пользователь заходит на первую страницу какого-нибудь веб-сайта, затем “спускается вниз”, затем еще и еще, затем возвращается “наверх” или “домой”, то все эти “вверх / вниз / домой” происходят только у него в голове, но никак не на уровне обмена данными между веб-браузером и сервером. В html-документе все очень просто.

Для разметки гипертекста используются специальные конструкции, называемые тегами. Тег – это служебное слово языка HTML, обрамленное угловыми скобками, которое является указанием для веб-браузера, как именно нужно интерпретировать следующий текст и в каком виде вывести его на экран. Кроме того, некоторые теги используются для внутренних целей, описывая структуру самого документа. Чтобы посмотреть загруженный html-документ, достаточно кликнуть правой кнопкой в любом месте документа и в контекстном меню выбрать опцию “Просмотр в виде HTML” (речь идет об Internet Explorer).

Базовый тег, на котором, собственно, и держится весь гипертекст, – тег <A HREF=”URL”> (Anchor), который чаще всего называют якорем, хотя более верный перевод – скрепка. Именно скрепка, с помощью которой один html-документ прикрепляется к другому, а тот – к третьему, третий – к четвертому и т. д. и т. п. Веб-браузер, встретив в html-документе тег <A HREF>, интерпретирует весь текст за ним, вплоть до закрывающего тега </A>, как ссылку на документ, адрес которого содержится в URL. Соответственно, когда пользователь щелкает по ссылке, веб-браузер именно из этого тега выбирает URL и согласно ему запрашивает у сервера новый документ.

Другой часто используемый тег <IMG SRC=”URL”> нужен для загрузки картинок. Причем, если URL в теге <A HREF> активизируется только после нажатия пользователем соответствующей ссылки, тег <IMG> сразу же приводит к загрузке соответствующего графического файла, описанного в URL. Впрочем, в первой версии HTML никакого тега <IMG> не было. Первый браузер, работавший с html-документами, Mosaic, выводил только текст (кстати, автором программы был Марк Андриссен, будущий основатель Netscape Communications).

JS и CSS

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

Язык JavaScript используется для возможности внесения визуальных изменений в html-документ без его перезагрузки с сервера, то есть непосредственно в браузере. Функции этого языка можно внедрять непосредственно в текст html-документа. Однако одни и те же функции иногда нужно использовать во всех (или большинстве) документах одного веб-узла. В этом случае текст функций на JavaScript помещается в отдельный текстовый файл с расширением JS, который подцепляется к html-документу специальным тегом. Файлы JavaScript недоступны для непосредственного просмотра из браузера. Но если в браузере выбрать пункт меню “Сохранить как…” и установить опцию “Веб-страница полностью”, то в указанном каталоге будут записаны все файлы, используемые данной страницей, включая и js-файлы.

Теги языка HTML 3, отвечающие за оформление текста и других элементов страницы, были довольно неуклюжими. А время требовало все более и более изысканного оформления текста. Пользователь морщился, видя страницу с крупным шрифтом в одну колонку, никак не отформатированную. Для облегчения жизни веб-разработчиков в язык HTML версии 4 была введена технология CSS – каскадный страничный стиль (Cascading Style Sheets). Почему каскадный – неизвестно, но обычно используется название “таблицы стилей”. Технология CSS позволяет скрупулезно описать внешний вид однотипных элементов на странице (например, ссылок). После такого описания в одном месте (обычно в начале ссс-документа) все однотипные элементы выглядят… однотипно. Для того чтобы изменить этот внешний вид – например, поменять цвет у всех ссылок сразу, – достаточно внести изменение в одном месте. Очень даже удобно. Однако точно так же, как и с языком JavaScript и его функциями, порой имеет смысл один и тот же стиль (или набор стилей) использовать на всех страницах веб-сайта (таким незамысловатым способом достигается единообразие). Описание всех стилей помещается в текстовый файл с расширением CSS и также может быть подключено к любому документу в рамках единого веб-сайта.

CGI и Perl

В общем HTML 4 вполне подходит для самого изысканного оформления документа. Однако популярность WWW во многом покоится не на красоте оформления, а на интерактивности. Именно все эти гостевые книги, форумы, чаты, интернет-магазины собирают сегодня огромное количество пользователей, а не веб-ресурсы, которые оформлены очень красиво, но абсолютно статично. Однако как раз интерактивность HTML обеспечить не может, не имеет он таких механизмов. Потому что HTML – это язык оформления, и больше ничего. Нет в HTML такого механизма, который позволяет пользователю ввести некоторый текст, нажать кнопку и тут же увидеть, как этот текст отобразился на экране. Почему?
Еще раз разберем, как работает веб-браузер.

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

Следовательно, читая какую-нибудь гостевую книгу, пользователь внимательно изучает файл, хранящийся на его локальном диске. Что должно произойти, чтобы он увидел свое сообщение? Он должен каким-то образом послать на сервер это свое сообщение. Сервер должен внести его в базу данных сообщений и на основе обновленной базы данных сгенерировать новый html-документ и в таком виде переслать автору сообщения. И, как уже было сказано, язык HTML не обладает инструментарием, который может обеспечить данную последовательность действий, ибо для этого нужен полноценный язык программирования.

Обойти это узкое место позволяет механизм, получивший название Общий интерфейс шлюзов – CGI (Common Gateway Interface). Этот механизм позволяет с помощью специального тега <FORM> описать структуру диалоговой формы, которая появляется в рабочем поле браузера вместе с текстом и картинками. Внутри этого тега описываются все поля и кнопки формы, метод отправки информации и программа, которая будет отвечать за ее обработку.

Программы, обрабатывающие сообщения от веб-браузеров по технологии CGI, чаще всего пишут на языке Perl. Язык Perl называют интегрирующим языком (glue language), поскольку он позволяет совместно использовать разнородные программные технологии. Название Perl является аббревиатурой от Practical Extraction and Report Language – язык извлечения данных и подготовки отчетов.

Программы на языке Perl имеют расширение PL. Они хранятся в подкаталоге cgi-bin общего каталога, в котором записаны все файлы веб-узла. В операционной системе UNIX название cgi-bin – это общее название для каталогов, в которых хранятся программы обработки cgi-запросов (иногда их называют cgi-сценариями). Существует два метода передачи данных в cgi-сценарий: GET и POST. Передача больших блоков данных происходит при помощи метода POST и не заметна пользователю. Если же веб-разработчик для передачи выберет метод GET, то при пересылке данные прикрепляются к URL программы-обработчика.
Предположим, имеется некий веб-ресурс с адресом www.x-name.ru. На первой странице этого сайта имеется форма для регистрации, состоящая из двух строк: Login и Password. Допустим также, что программа, обрабатывающая введенные данные, хранится в файле logpas.pl. В этом случае после ввода данных передача данных может иметь следующий вид: www.x-name.ru/cgi-bin/logpas.pl?log=ivan&pas=123.

Здесь log и pas – имена переменных, в которые введены соответственно логин и пароль. Между собой они соединены знаком &, а их конкретные значения стоят после знака равенства. Весь блок описания данных отделен от URL вопросительным знаком.

PHP и ASP

По ряду причин технология CGI в последнее время пользуется все меньшей популярностью. Дело в том, что обработка cgi-запросов и генерация на их основе новых html-документов довольно медленная, поскольку html-документы и программы их генерации отчуждены друг от друга. Определенную сложность представляет механизм настройки прав доступа в UNIX, которую начинающие веб-разработчики осваивают нелегко, с некоторым напряжением.

Новым словом в создании интерактивных html-страниц стала технология PHP, которую расшифровывают как Personal Home Page (персональная домашняя страница), что не очень правильно, или Personal Hypertext Processor (персональный гипертекстовый процессор), что больше соответствует истине. Поначалу технология PHP появилась как расширение Perl/CGI (это знаменательное событие произошло в 1995 году), однако позднее обросла различными дополнениями. Самое главное удобство PHP заключается в следующем: при формировании страниц по технологии CGI работа с дисковыми файлами на сервере могла осуществляться только путем запуска специальной программы на Perl или другом языке, поддерживаемом сервером. Технология PHP позволяет использовать процедуры чтения / записи в файл прямо из html-документа. Вернее, при разработке веб-сайта, основанного на PHP, “чистые” html-документы не используются (или, во всяком случае, они являются второстепенными элементами).

Когда пользователь после клика на ссылке получает загруженный документ, у которого расширение не HTML (скажем, document.html), а PHP (document.php), то, просмотрев его из браузера (через контекстное меню), он не обнаружит каких-либо отличий от классического html-документа. Все правильно – к нему на машину поступил уже сгенерированный HTML. Однако на сервере этот файл представляет собой некоторый шаблон, полностью написанный на PHP или включающий конструкции этого языка. В тот момент, когда сервер получает от удаленного компьютера запрос на чтение php-файла, он на его основе генерит стандартный html-документ и отсылает уже этот сгенерированный файл.

Понятно, что для этого сервер должен поддерживать язык PHP, но сегодня практически все веб-серверы предоставляют разработчикам такую поддержку.
Технология PHP очень удобна для построения разного рода интернет-магазинов. Полная информация о продаваемых товарах хранится в базе данных. Пользователь, запрашивая те или иные php-документы, запускает, сам того не подозревая, процесс чтения данных из базы и генерирования из них html-документов, структурированных согласно шаблону.

Нередко в адресной строке браузера можно видеть, что расширение у какого-нибудь загруженного документа не HTML, не PL и не PHP, а ASP. Технология ASP (Active Server Pages) – это технология компании Microsoft. Билл Гейтс вообще первое время слабо реагировал на интернет. Он считал, что Microsoft там поживиться нечем. Это был один из тех случаев, когда его ошибка дорого стоила компании. В результате Microsoft чувствует себя не так привольно в мире веб-серверов, как в мире операционных систем и офисных приложений. Однако, поскольку, если уж Билл Гейтс за что-то берется по-настоящему, результаты не заставляют себя ждать, какая-то часть серверов в интернете (конечно, пока еще довольно небольшая) работает под управлением продуктов Microsoft. Неудивительно поэтому, что Microsoft было жизненно необходимо создать собственную технологию, аналогичную PHP. Она и создала ее – ASP. Только в ASP-шаблонах вместо языка PHP чаще всего используется скриптовый язык VBScript. Что поделаешь – Гейтс с детства любит “Бейсик”. Во всем остальном технология ASP похожа на PHP.

Cookies

Есть еще один вид файлов, который используется во время обмена данными между браузером и сервером. Во время сеанса связи между браузером и cgi-программой помимо формирования html-документа cgi-программа может передать на локальный компьютер пакет служебной информации. Эта информация сохраняется на локальном диске в виде так называемого cookie-файла. Эти файлы обычно передаются обратно создавшему их серверу, даже если запрашивается обычная html-страница. Зачем же понадобилось организовывать такую странную и далеко не безопасную технологию обмена информацией через CGI?

Дело в том, что веб-браузер не может установить постоянную связь с сервером. Он лишь посылает запрос и обрывает связь, переходя в режим ожидания (строго говоря, не браузер прерывает связь, но эти тонкости в рамках данной статьи мы рассматривать не будем). Но cgi-программа иногда должна точно знать, сколько уже к ней производилось обращений (например, для того, чтобы не выводить в гостевой книге подряд несколько постов, если нервный пользователь жмет и жмет на кнопку “Послать”, в то время как уже первое нажатие начало обрабатываться). Другого способа определить количество соединений нет.

Технология cookies используется для реализации далеко не бесспорной концепции отслеживания сеанса (session tracking). Каждый cookie-файл содержит уникальный для данного сервера идентификатор пользователя (UIN). Этот UIN заносится в базу данных сервера. Поскольку cookie-файл хранит информацию о том, какие страницы в пределах веб-сайта посещал данный UIN, то можно вычислить его предпочтения и в следующий раз не выдавать пользователю ненужных страниц. Это, конечно же, удобно. Однако сама концепция слежения многих нервирует. Кроме того, возможна ситуация, когда пренебрежение правилами сетевой гигиены приводит к размножению на локальном диске разного рода троянов, бэкдоров и прочей нечисти. Шпионская программа может обратиться к специальному каталогу, в котором хранятся все cookie-файлы, и собрать уже информацию обо всех посещаемых веб-ресурсах и, соответственно, предпочтениях человека. Это уж, знаете ли, и вовсе из рук вон… В общем, нормальный веб-браузер должен позволять пользователю блокировать использование cookies. В этом случае, правда, возможно, что браузер будет некорректно работать с некоторыми веб-сайтами, но право на тайну личной жизни, как говорится, дороже.

Вот, собственно, и все. Все остальные файлы – картинки, флэш-ролики, видеоклипы, MP3, DOC, PDF и прочие, которые в обилии хранятся на серверах Сети, – строго говоря, к WWW отношения не имеют. Это, так сказать, единицы хранения, не образующие остов Всемирной паутины. Но именно эти файлы чаще всего являются главным стимулом, заставляющим человека тратить свои кровные на покупку модема, оплату услуг провайдера, трафика и качать их, качать, качать… UP

Дмитрий Румянцев

Никто не прокомментировал материал. Есть мысли?