Занимательные протоколы

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

В закладках вашего браузера наверняка все или почти все записи начинаются со знаков «http:» или «https:». Это и есть схема данного URL (универсальный идентификатор ресурса). В общем случае URL выглядит так:

<схема>:<логин>:<пароль>@<хост>:<порт><параметры>

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

ftp://username:userpassword@ftpserver.com:9999/folder/file.zip

http://username:userpassword@httpserver.com:8080/folder/file.zip?version=new

Приведенный пример со схемой FTP означает, например, что браузер попытается подключиться к компьютеру «ftpserver.com» на порт 9999 по специальному протоколу FTP, оптимизированному для передачи файлов. Кроме этого, самыми распространенными являются схемы HTTP и HTTPS. Первая означает обращение к ресурсу по протоколу, предназначенному для обмена текстовыми документами и дополнительными данными, такими как передаваемые через веб-интерфейс файлы, куки, данные для аутентификации пользователей, MIME-типы и многое другое. Схема HTTPS предназначена для тех же целей, но работает по умолчанию на других портах и предоставляет дополнительные средства для обеспечения безопасности соединения.

Впрочем, это все давно известно и без моих потуг. Гораздо больший интерес представляют другие схемы, о которых мы сегодня и поговорим.

Схема urn:

Данная схема не используется в браузерах непосредственно, так как является слишком общей и всеобъемлющей. Она может адресовать практически что угодно, и использовать ее только для веб-страниц было бы нерационально. Во Всемирной паутине для адресации используется URL, который является лишь частным случаем URN (Uniform Resource Name). Если главная задача URL – направить пользователя к расположению требуемого ресурса, то URN предназначен для идентификации конкретного объекта, а не для его локации. Кроме того, URN описывает еще и пространство имен, к которому принадлежит описываемый идентификатор (указывается после схемы). Упрощая, URL можно сравнить с адресом или телефоном человека, а URN - с серией и номером его паспорта. Вот примеры некоторых URN:

«urn:uuid:85BBD920-42A0-1069-A2E4-08002B30309D» - идентификатор объекта «Портфель» (Briefcase) в Windows.
«urn:isbn:978-5-17-060502-6» - вы узнали буковки ISBN? Это и есть пространство имен в URN. А цифры после второго многоточия указывают на книгу, которой соответствует номер. И совсем не адрес в Интернете. Кстати, если вам нравится стиль Стругацких, книгу рекомендую прочесть.
«urn:oid:2.16.643» - URN Российской Федерации, определенной по коду OID.
«urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO50» - URN некоего конкретного файла, идентифицируемого хэш-кодом по алгоритму SHA1. Подобный указатель полезен там, где ресурс не имеет определенного расположения и вообще может не существовать целиком в отдельно взятый момент времени. Тем не менее, его можно получить по идентификатору. Такие URN часто используются в P2P-сетях, например BearShare или BitTorrent.

Вообще, URN применяется для указания чего угодно, нужно задать лишь пространство имен и идентификатор. Это может быть адрес в Интернете, автомобиль (физический объект, а не регистрация его в базах данных), номер музейного экспоната (информация) и сам экспонат (предмет), рейтинг музыкального диска (но не его величина!) или значение этого рейтинга по какой-либо системе оценки.

Ваша голова уже кружится? Тогда давайте обратимся к чему-нибудь попроще, что можно «пощупать руками».

Схема about:

Эта схема дает уникальные результаты для каждого приложения. В основном она используется для вывода некоторой статичной информации (например об авторах используемой программы) или данных о конфигурации. Во всех распространенных браузерах есть некоторый набор совпадающих about-адресов, который дает предсказуемый результат. Например, при попытке обратиться к URL «about:blank», браузеры вернут чистую страницу. В большинстве браузеров (кроме MSIE) адрес «about:cache» выдает информацию о посещенных страницах, сохраненных в кэше браузера файлах и пространстве на диске, занятом временными файлами во время серфинга. Здесь же можно «эксгумировать» остатки информации, которые более не могут быть получены прямым путем – например, если нужно найти комментарий на форуме, который был удален автором. Обращение к «about:plugins» покажет конфигурацию дополнительных модулей браузера (опять же, работает везде, кроме Internet Explorer). К сожалению, использование схемы «about:» не стандартизовано, поэтому для изучения всех способностей вашего браузера по использованию данного протокола придется обратиться к документации. То, что такая информация будет полезна, вряд ли вызовет у кого-то сомнение. Вот, например, несколько полезных about-ов для популярных браузеров:
Страницы «about:» браузера Google Chrome:

about:stats – статистика процессов Chrome. Это Ужасно Секретная Страница!
about:dns – записи DNS;
about:memory – информация об использовании ресурсов компьютера браузером в целом и каждой вкладкой в отдельности.

Страницы «about:» браузера Opera:

about:button – настраивает действие кнопок в браузере;
about:config – позволяет настроить многие параметры, в том числе и те, которые невозможно изменить через стандартное окно настроек; about:historysearch – открывает страницу встроенной системы поиска по истории посещенных страниц.

Страницы «about:» браузера Firefox:

about:feeds – страница просмотра и подписки RSS;
about:buildconfig – описывает все параметры компиляции и сборки данной версии браузера для используемой платформы;
about:robots – шутка от разработчиков. Передает вам послание от роботов-инопланетян. Кстати – ни в коем случае не нажимайте ту кнопку больше двух раз!

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

Схема mailto:

Данная схема обычно имеет вид наподобие «mailto:ivan.ivanov@server.com». Интересна она тем, что возвращает не данные, а операцию – отправку письма указанному пользователю по электронной почте. После указания схемы, как правило, пишется только адрес электронной почты, хотя такой адрес может содержать и параметры – например тему сообщения.

Вот так может выглядеть ссылка, создающая письмо с заранее заполненным полем «Тема сообщения»:

mailto:inbox@chrisalis.ru?subject=вопрос

Помимо этого, имеется возможность указать адрес со схемой «mailto:» в качестве адреса (атрибут «action») при заполнении HTML-форм (тег
), чтобы отправлять на сервер письма с заполненными полями – это может уменьшить нагрузку на сервер, автоматизировать некоторые процессы и добавить удобства в обработке информации. Мне такая возможность кажется очень интересной и полезной, хотя web-мастера, как ни странно, ее практически не используют.

Чтобы не быть голословным, приведу пример. Создайте обыкновенный текстовый файл и поменяйте его расширение на HTML. Откройте его в блокноте и внесите туда строки:







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

Схема javascript:

Следующий URL-протокол, который нельзя не упомянуть, – это «javascript:». Как и предыдущая схема, данный вариант адресации указывает не на объект, а на действие. Отличие в том, что после указания протокола «javascript:» должна находиться функция на одноименном языке программирования. Попытка перейти по ссылке, указывающей на этот URL, вызовет исполнение данной функции в браузере пользователя. В современном сайтостроении эта возможность применяется для динамического создания ссылок, проверки содержимого форм перед отправкой и построения интерфейсов WEB2.0. Эту схему можно использовать везде, где требуется указание URL, кроме атрибута «SRC» в теге «IMG». Это вполне логично, поскольку IMG все- таки должен получить в ответ не операцию, а именно данные.

Возможность указания на web-страницы ссылки на какое угодно действие – само по себе интересно, но самое занятное начинается, если мы попытаемся посмотреть на эту возможность немного шире. Почему, собственно, ссылка должна находиться на web-странице? Да, команда, которая будет вызвана при переходе по ссылке, отработает в пределах страницы (если только она сама не создает новых окон и страниц). Но ведь ссылке не обязательно находиться именно там!

Для тех, кто догадался сам, следующий абзац будет не интересен.

В браузере, помимо строки адреса, есть еще одно место, в котором можно указать URL. Это закладки. При переходе на закладку, содержащую javascript-URL, вы запустите на текущей странице команду, содержащуюся в данном псевдоадресе. А эта команда, в свою очередь, может сделать очень многое – вырезать из страницы картинки, подсветить по определенному признаку куски текста, скопировать выделение в буфер обмена, пересчитать в нем пробелы и вывести их количество в отдельном окне, обратиться к онлайновому переводчику или заменить цвет текста на удобный вам… Ограничение всего одно – ваши потребности. Такой подход породил целый класс кроссбраузерных мини-программ, живущих в панели закладок. Последнее время их стали называть «букмарклеты», от английских слов «bookmark» - закладка и «applet» - приложение.

Кстати, вам разве не интересно, что случится, если открыть стандартное окно «Выполнить…» (под кнопкой «Пуск») и ввести что-нибудь вроде этого: «javascript:alert(“test”); »?

Схемы news: и nntp:

Эти две схемы обозначают одно и то же: обращение к новостным группам USENET. Разница заключается только в стандартах, которые используются при обращении к серверам, поставляющим информацию по этим протоколам. Вы не знаете, что такое USENET? Ну что же, давайте немного углубимся в историю.

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

Адреса конференций напоминают имена серверов в Интернете, например: «comp.sys.amiga». Разница в том, что распознавать их нужно не справа налево, а наоборот – иерархия групп начинается с первого слова в адресе. Приведенный пример означает «Адрес группы новостей о компьютерах, раздел о системах, конкретно – о компьютерах Амига». Основные иерархии конференций USENET составляют «Большую Восьмерку»:
comp.*: обсуждение тем, связанных с компьютерами (comp.software, comp.sys.amiga);
misc.*: разнообразные темы (misc.education, misc.forsale, misc.kids);
news.*: новости Usenet-a (news.groups, news.admin);
rec.*: развлечения и отдых (rec.music, rec.arts.movies);
sci.*: научные дискуссии (sci.psychology, sci.research);
soc.*: социальные темы (soc.college.org, soc.culture.african);
talk.*: разговоры, в том числе на «горячие» темы (talk.religion, talk.politics);
humanities.*: искусство, литература, философия (humanities.classics, humanities.design.misc).

Однако основной объем трафика в этой сети проходит не через эти конференции. По некоторым данным, в день через новостные группы отправляется до 5 терабайт данных – согласитесь, колоссальная цифра. Большая их часть приходится на иерархию групп «alt.binaries.*», в которой публикуются файлы. Здесь пользователи делятся друг с другом играми, фильмами, фотографиями и другими данными, занимающими большой объем. Как правило, именно такие группы попадают в категорию платных. В этом отношении USENET выигрывает у сетей peer-to-peer, так как в отличие, например, от торрентов, здесь нет необходимости в «раздаче» полученного контента, раскачке «рейтинга» или подобного параметра, а другие достоинства (анонимность, высокая скорость загрузки, безопасность, уникальность контента) явно показывают, что USENET переживет и торрент-сети, и расплодившиеся файлообменники. Это подтверждается тем фактом, что многие релизы начинают свое шествие по Сети именно из новостных групп, появляясь затем в трекерах и на обменниках, а некоторые из-за своих внушительных объемов остаются только в USENET.

Схема data:

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

К счастью, такая технология уже есть. Реализуется она, как вы поняли, при помощи URL-схемы «data:». После указания такой схемы в URL вместо адреса идут непосредственно данные, которые предполагается получить при переходе по такой ссылке. Например, в тексте HTML-страницы вы встретите такую строку:

Example”>Link

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

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

На практике она все чаще применяется для вставки изображений (рамок, иконок) в CSS-файл. Например, строка с описанием небольшой иконки для неформатированного списка в таблице стилей может выглядеть так:

UL LI { background: url(data:image/png;base64,iVBORw … FTkSuQmCC) top left no-repeat;}

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

Если вы внимательно рассмотрели приведенный пример, то наверняка заметили, что в ссылке, формирующей изображение, после схемы были указаны MIME- тип возвращаемых данных и кодировка Base64 – это тот самый стандарт, который используется при кодировании файлов в электронной почте. Просматривая исходники e-mail с приложенными файлами, вы можете найти длинные столбцы непонятных символов – это и есть вложения, закодированные по стандарту Base64. Отличие URL, используемых в данном случае, – строка должна быть непрерывной. На практике это накладывает некоторые ограничения на размер файла, который может быть декодирован браузером.

Схема file:

С данным протоколом вы наверняка не раз сталкивались. Он используется для обращения к локальным файлам – например, справочным материалам в формате HTML, сохраненным на жестком диске web-страницам или картинкам, которые вы по какой-то причине открыли именно в браузере. Схема адресации похожа на обычный путь к файлу, который используется в командной строке, но с добавлением слешей: вместо «» следует писать «». Хотя первый вариант, без указания схемы, тоже будет работать в большинстве браузеров. Следует также отметить, что в последнее время все чаще используется UNIX-подобная запись, при которой даже на Windows-системах путь к документу записывается с применением слешей, а не бэкслешей (символ «/» вместо «\»).

Применение данного протокола не исчерпывается одним лишь чтением сохраненных интернет-страничек. Знать о его существовании будет полезно, если вы локально используете программы, ориентированные изначально на работу с сетью. Например, при использовании SVN на компьютере без выхода в Сеть, если у вас нет желания превращать рабочую станцию еще и в сервер, можно обращаться к хранилищам системы версий не по протоколам «https:» или «svn:», а с помощью «file://», например: «file:///C:/MySvnStorage/». Если хранилище (или другой ресурс используемой вами программы) находится на сервере, но вы являетесь единственным пользователем и все же хотите использовать протокол «file:» для доступа к информации, URL будет иметь вид «file://server/path/MySvnStorage» - обратите внимание, в отличие от локального адреса здесь всего два слеша после названия схемы.

Схема svn:

Раз уж мы упомянули системы контроля версий, не помешает рассказать немного и об используемых ими схемах доступа к хранилищам. Как правило, они записываются в виде «название_системы:адрес хранилища». Системой в данном случае могут быть SVN, CVS или любая другая. Браузеры вряд ли будут работать с этими указателями без специальных дополнений. Если вы встретите такие URL, скорее всего, это произойдет в другой среде – например, универсальная среда разработки Eclipse. В ней уже встроена возможность работы с CVS, а дополнение под названием SubClipse даст возможность работать с SVN.

На самом деле, список протоколов для данной задачи не ограничивается двумя. Вот список схем, по которым можно обращаться к хранилищу:
file:// - Прямой доступ к хранилищу на локальном или сетевом диске.
http:// - Доступ через протокол WebDAV к Subversion, работающем на сервере Apache.
https:// - То же самое, что и http://, но с шифрованием SSL.
svn:// - Не аутентифицируемый TCP/IP доступ через собственный протокол к серверу svnserve.
svn+ssh:// - Аутентифицируемый, зашифрованный TCP/IP доступ через собственный протокол к серверу svnserve.

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

Схема onenote:

С появлением в пакете Microsoft Office записной книжки OneNote я стал довольно часто пользоваться ярлыками, которые используют схему «onenote:». Фактически, это комбинация путей к файлу и web-ссылок. Так как электронный блокнот хранит свои документы в отдельных папках и файлах, совпадающих по структуре с разделами записной книжки, можно легко разделить путь и дополнительные параметры, например, ссылку на конкретный абзац нужной страницы или подстраницы. Вот так, например, выглядит ссылка на мою пометку о написании данной статьи на странице с планами публикаций:

onenote://E:/_proj/press/Тексты.one#Темы§ion-id={083D7654-93FB-4D66-90A5-CFFBF04A51C9}&page-id={D4B56BA0-2BE9-4BDB-9835-8AB1F84E422B}&object- id={318E5286-5B37-4297-A9B1-777203CCD4FC}&3F

Выглядит довольно громоздко, но очень удобно в использовании. Еще большим удобством стало то, что OneNote использует дополнительные внутренние протоколы для интеграции с остальными продуктами Office. Например, в Outlook нет возможности получить ссылку на какой-либо элемент, например, контакт или задачу. Но стоит только выбрать в контекстном меню строку «Заметки к контакту(собранию)» и … вуаля – вы получаете в блокноте подробную запись об этом элементе, а главное – ссылку на него. Выглядит она примерно следующим образом:

onenote:outlook?folder=Contacts&entryid=0000000036B1688888F8734C893F746F79C597A464372900

Открыв такую ссылку не в Onenote, а в командной строке, мы получим активированный контакт outlook.

Стоит также упомянуть, что сходные приемы используют и конкуренты Microsoft Onenote. Например, программа-органайзер Evernote использует внутри своих документов ссылки вида «evernote://[путь к файлу данных и id заметки] ", правда, она не так хорошо интегрируется в ОС, как приложения Microsoft. Впрочем, данный продукт активно развивается, и мы наверняка скоро увидим в нем все «вкусности», которые уже имеются в продуктах от «одной известной корпорации».

Схемы skype: и callto:

При установке известная программа VoIP-телефонии Skype добавляет в систему поддержку протокола «skype:», благодаря чему становится возможна инициация звонков через Интернет простым щелчком по ссылке. Адрес, по которому переходит пользователь, напоминает упомянутый выше URL электронной почты и выглядит так: «skype:SkypeUserName». Ссылка по схеме «callto:» действует точно так же и лишь немного отличается синтаксисом (больше похожа на обычный URL) – в ней после указания схемы и двоеточия ставится двойной слеш. Правда, у протокола «callto:» есть еще одно отличие – он может быть связан не только со скайпом, но и с другой системой телефонии. Поскольку Skype сам распоряжается информацией о том, что делать при вызове такой ссылки, можно не только осуществить звонок, но и воспользоваться другими функциями этой программы – например, начать чат с другим абонентом этой сети. Вот примеры таких ссылок в коде web-страницы:

Позвонить SkypeUserName
Позвонить SkypeUserName
Позвонить SkypeUserName
Позвонить SkypeUserName на телефон
Начать чат с user1
Начать мультичат с 3 абонентами Скайп
информация о SkypeUser

Схема ed2k:

Ссылки, использующие данную схему, в основном применяются в приложениях для обмена файлами в P2P-сетях, таких как Kazaa, eDonkey2000 или BitTorrent. По сути, они являются хеш-кодом файла, хранящегося на компьютерах пользователя сети, и позволяют идентифицировать искомый ресурс и попросить других пользователей предоставить к нему доступ. Подобные ссылки являются скорее URN, а не URL, и называются magnet-ссылками.
В данный момент происходит разработка и попытка стандартизации протокола «magent:», и хотя наиболее очевидное его применение лежит в области файлообменных сетей, ему можно найти и другие применения. Схема «ed2k:» является частным случаем такой ссылки и чаще всего записывается следующим образом:

ed2k://|file|[Имя файла]|[Размер файла]|[ ed2k хеш файла ]|/

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

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

P.S. Вы не забыли про «mailto:»? Мой адрес - Lecosson@mail.ru

Александр Поляков.


Компьютерная газета. Статья была опубликована в номере 19 за 2010 год в рубрике интернет

©1997-2024 Компьютерная газета