HTTP/0.9
Итак, в 1984-ом Тим Бернерс-Ли возвращается в CERN и продолжает свою работу над Enquire. В 1989-ом его работа выливается в рацпредложение.
Предложение TimBL по вводу распределённой гипертекстовой системы (Вольный пересказ):
– Это всё хорошо, но как мы будем следить за таким большим проектом?
Рацпредложение Тима Бернерса-Ли 1989 года дает ответ на такие вопросы. Во-первых, здесь предлагается решение проблемы доступа к информации в CERN. Во-вторых, оно вносит идею связанных информационных систем и сравнивает их с менее гибкими способами поиска информации.
Между делом замечу, что гипертекст – это просто текст со ссылками. Примером может быть книжка с указателем или фразами типа “за более подробным доказательством данного факта обратитесь к книге…”.
Основной проблемой, с которой предстояло справиться новой системе, была потеря информации в CERN. Для её решения каждый модуль системы должен был иметь дополнительную информацию, отвечающую на вопросы:
- Где этот модуль используется?
- Кто написал этот код? Где он работает?
- Какие существуют документы об этой концепции?
- Какие лаборатории включены в этот проект?
- Какие системы зависят от этого устройства?
- Какие документы относятся к нему?
Мало того, что вся информация должна “складироваться” и записываться в “амбарной книге”, она должна быть удобной, т.е. предоставлять удобный способ доступа к ней. К примеру, удобно рисовать объекты в виде кружков/овалов, а их взаимосвязи – стрелочками/линиями. Теперь применим ту же логику — и вот у нас документы со связями(ссылками)… То есть, тот самый гипертекст.
Всё то же рацпредложение (Вольный пересказ):
Так же к системе предъявлялся некоторый список разумных условий:
- Удалённый доступ. Требование вполне естественное: CERN организация немаленькая…
- Неоднородность. Т.е. поддержка машин различных архитектур: в CERN были и VAX’ы, и макинтошы, и юниксы…
- Децентрализованность. Информационные системы появляются отдельно друг от друга, а затем сливаются. Новая система должна позволить существующим системам быть связаны друг с другом без какого-либо централизованного контроля и координации.
- “Частные” ссылки. Нужно предоставить возможность добавлять ссылки на частные и государственные документы.
- “Плюшки”. Хранимые данные должны нормально отображаться в ASCII консоли 24×80. “Плюшки” типа изображений подождут.
- Анализ данных. Так же хотелось реализовать некоторую обработку собранных данных.
- “Живые” ссылки. Ссылка достаточно статична, документ же может быть перемещён.
- Какая-нибудь реализация отслеживания авторских прав и защиты данных.
Стоит отметить, что как раз в то время формировался стандарт гипертекста, так что работа Тима Бернерса-Ли была кстати.
Ещё в рацпредложении сказано, что единственное решение, при котором система будет достаточно гибкой, – то, в котором задача хранения информации и задача её отображения кладутся на разные машины при чётком протоколе их взаимодействия.
Итак, большая часть из задуманного была реализована:
- Создаётся TCP/IP соединение на указанный пользователем IP/доменное имя, указанный порт (если порт не указан – берём 80ый).
- Запрос отсылается клиентом на сервер в виде ASCII строки, заканчивающейся байтами 0D, 0A (возврат каретки, перевод строки). Хотя, сервер может и не требовать возврат каретки… Сам запрос состоит из слова GET <пробел> и адреса запрашиваемого документа (в адресе нет пробелов). Дальнейшие слова в запросе игнорируются.
- Ответ на запрос – ASCII сообщение в гипертекстовом языке разметки (HTML). Возвращаемый текст может содержать переводы как ODOA, так и просто переводы строк. Так же рекомендуется форматировать под вывод на 80ти колонный интерфейс. Сообщение заканчивается закрытием соединения сервером. Сообщение об ошибке должно передаваться пользователю в понятном виде.
- Отключение происходит либо при нарушении соединения, либо после полной передачи сообщения сервером.
Все соединения независимы, сервер не хранит информацию о них.
Очевидно, что протоколу было куда “расти” (вспомнить хотя бы “плюшки”). Очевидно это было и Тиму Бернерсу-Ли. Возможно, именно по этой причине протокол носил не номер 1, который присваивался обычно релизам, а 0.9 (beta), как бы говоря, что это пробная версия и следуют улучшения…