Программы
Вначале было слово… Потом – протокол для его передачи

Вначале было слово… Потом – протокол для его передачи

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

HTTP/0.9

Итак, в 1984-ом Тим Бернерс-Ли возвращается в CERN и продолжает свою работу над Enquire. В 1989-ом его работа выливается в рацпредложение.

Предложение TimBL по вводу распределённой гипертекстовой системы (Вольный пересказ):

Многие, обсуждая будущее CERN и непосредственно LHC (да-да, тот самый Большой Адронный Коллайдер), задаются вопросом:

– Это всё хорошо, но как мы будем следить за таким большим проектом?

Рацпредложение Тима Бернерса-Ли 1989 года дает ответ на такие вопросы. Во-первых, здесь предлагается решение проблемы доступа к информации в CERN. Во-вторых, оно вносит идею связанных информационных систем и сравнивает их с менее гибкими способами поиска информации.

Между делом замечу, что гипертекст – это просто текст со ссылками. Примером может быть книжка с указателем или фразами типа “за более подробным доказательством данного факта обратитесь к книге…”.

Основной проблемой, с которой предстояло справиться новой системе, была потеря информации в CERN. Для её решения каждый модуль системы должен был иметь дополнительную информацию, отвечающую на вопросы:

  • Где этот модуль используется?
  • Кто написал этот код? Где он работает?
  • Какие существуют документы об этой концепции?
  • Какие лаборатории включены в этот проект?
  • Какие системы зависят от этого устройства?
  • Какие документы относятся к нему?

Мало того, что вся информация должна “складироваться” и записываться в “амбарной книге”, она должна быть удобной, т.е. предоставлять удобный способ доступа к ней. К примеру, удобно рисовать объекты в виде кружков/овалов, а их взаимосвязи – стрелочками/линиями. Теперь применим ту же логику — и вот у нас документы со связями(ссылками)… То есть, тот самый гипертекст.

Всё то же рацпредложение (Вольный пересказ):

В 1980 году я написал программу для отслеживания программ, с которыми я работал в системе управления PS. Она позволяла хранить фрагменты информации, а также собирать все воедино. Поиск осуществлялся одним проходом через ссылки с одного листа на другой, как в старой компьютерной игре “Adventure”. Это похоже на HyperCard, созданное недавно для Apple Macintosh. Разница в том, что это можно использовать на многопользовательской системе, что позволит многим людям получить доступ к одним и тем же данным.

Так же к системе предъявлялся некоторый список разумных условий:

  • Удалённый доступ. Требование вполне естественное: CERN организация немаленькая…
  • Неоднородность. Т.е. поддержка машин различных архитектур: в CERN были и VAX’ы, и макинтошы, и юниксы…
  • Децентрализованность. Информационные системы появляются отдельно друг от друга, а затем сливаются. Новая система должна позволить существующим системам быть связаны друг с другом без какого-либо централизованного контроля и координации.
  • “Частные” ссылки. Нужно предоставить возможность добавлять ссылки на частные и государственные документы.
  • “Плюшки”. Хранимые данные должны нормально отображаться в ASCII консоли 24×80. “Плюшки” типа изображений подождут.
  • Анализ данных. Так же хотелось реализовать некоторую обработку собранных данных.
  • “Живые” ссылки. Ссылка достаточно статична, документ же может быть перемещён.
  • Какая-нибудь реализация отслеживания авторских прав и защиты данных.

Стоит отметить, что как раз в то время формировался стандарт гипертекста, так что работа Тима Бернерса-Ли была кстати.

Ещё в рацпредложении сказано, что единственное решение, при котором система будет достаточно гибкой, – то, в котором задача хранения информации и задача её отображения кладутся на разные машины при чётком протоколе их взаимодействия.

Итак, большая часть из задуманного была реализована:

  • Создаётся TCP/IP соединение на указанный пользователем IP/доменное имя, указанный порт (если порт не указан – берём 80ый).
  • Запрос отсылается клиентом на сервер в виде ASCII строки, заканчивающейся байтами 0D, 0A (возврат каретки, перевод строки). Хотя, сервер может и не требовать возврат каретки… Сам запрос состоит из слова GET <пробел> и адреса запрашиваемого документа (в адресе нет пробелов). Дальнейшие слова в запросе игнорируются.
  • Ответ на запрос – ASCII сообщение в гипертекстовом языке разметки (HTML). Возвращаемый текст может содержать переводы как ODOA, так и просто переводы строк. Так же рекомендуется форматировать под вывод на 80ти колонный интерфейс. Сообщение заканчивается закрытием соединения сервером. Сообщение об ошибке должно передаваться пользователю в понятном виде.
  • Отключение происходит либо при нарушении соединения, либо после полной передачи сообщения сервером.

Все соединения независимы, сервер не хранит информацию о них.

Очевидно, что протоколу было куда “расти” (вспомнить хотя бы “плюшки”). Очевидно это было и Тиму Бернерсу-Ли. Возможно, именно по этой причине протокол носил не номер 1, который присваивался обычно релизам, а 0.9 (beta), как бы говоря, что это пробная версия и следуют улучшения…