Simple Unified Internet Protocol — Версия 0.1
HTTP был создан в 1991 году для обмена гипертекстовыми документами. С тех пор его расширяли, патчили и адаптировали для всего: от стриминга видео до чатов в реальном времени и REST API. В результате получился протокол, который:
Это не попытка заменить HTTP. Это исследование того, как мог бы выглядеть HTTP протокол, спроектированный сегодня с нуля.
SUIP (Simple Unified Internet Protocol) — экспериментальный протокол, построенный на четырёх принципах:
Ядро протокола должно быть достаточно простым, чтобы понять его за один вечер и реализовать за выходные. Сложность принадлежит опциональным расширениям, а не фундаменту.
Протокол должен объяснять сам себя. Клиенты должны уметь обнаруживать возможности сервера без внешней документации. Серверы должны объявлять, что они умеют.
Расширения должны быть стандартизированными паттернами, а не ad-hoc добавками. CRUD API, стриминговый сервис и pub/sub система должны использовать узнаваемые, универсальные паттерны.
Если что-то сложно реализовать — это неправильно. Референсная реализация должна быть меньше 2000 строк. Спецификация должна быть ясной, краткой и практичной.
SUIP использует фиксированный 12-байтный бинарный заголовок, за которым следует тело переменной длины:
Байт 0: Версия протокола (0x01) Байт 1: Тип сообщения (REQUEST / RESPONSE / ERROR) Байт 2: Операция (FETCH / STORE / LIST / INFO) Байт 3: Статус-код (SUCCESS / NOT_FOUND / и т.д.) Байт 4: Тип контента (TEXT / BINARY / XML / STRUCTURED_PATH) Байт 5: Флаги (сжатие, keep-alive, приоритет) Байты 6-7: Зарезервировано Байты 8-11: Длина контента (big-endian)
Вот и всё. Никакой неоднозначности при парсинге. Никаких заголовков переменной длины. Никаких проблем с кодировкой текста.
suip://host[:port]/path
Порт по умолчанию: 2802. Транспорт: TCP.
| Код | Имя | Назначение |
|---|---|---|
| 0x01 | FETCH | Получить ресурс |
| 0x02 | STORE | Сохранить ресурс |
| 0x03 | LIST | Список доступных ресурсов |
| 0x04 | INFO | Метаданные ресурса |
| Код | Имя |
|---|---|
| 0x00 | SUCCESS |
| 0x01 | NOT_FOUND |
| 0x02 | ACCESS_DENIED |
| 0x03 | SERVER_FAULT |
| 0x04 | INVALID_REQUEST |
| 0x05 | UNSUPPORTED_OPERATION |
Шесть статус-кодов. Это всё, что нужно для MVP.
SUIP определяет минималистичную XML-разметку для контента:
<?xml version="1.0"?>
<page>
<container>
<text class="heading">Добро пожаловать в SUIP</text>
<text>Простая страница без JavaScript, без CSS-фреймворков, без bloat.</text>
<link href="suip://localhost/about.xml">Узнать больше</link>
</container>
</page>
Четыре элемента: <page>, <container>, <text>, <link>. Всё остальное — расширения.
Ядро протокола намеренно минималистично. Дополнительная функциональность добавляется через стандартизированные расширения:
Серверы объявляют свои возможности через /.well-known/capabilities. Клиенты адаптируются автоматически.
SUIP — open source. Ты разработчик или просто аноним, любопытствующий о том, как работает интернет — добро пожаловать.